当前位置: 首页 > 知识库问答 >
问题:

无法覆盖从adls位置读取的ORC文件的架构

阎令
2023-03-14

我必须更改ORC文件的模式。ORC保存在adls位置。
orc文件中的原始模式是旧模式列标题:(C1、C2、C3、C4)
我想用新模式(从结构类型和结构字段创建。)新模式列标题:(姓名、年龄、性别、时间)覆盖原始模式

我使用的spark命令是:val df2=spark。阅读格式(“orc”)。架构(schema)。加载(“路径/”)

只要我运行df2。显示(2,错误)

所有列的数据都变为空。

当我不重写已经存在的旧架构并运行

val df2=火花。阅读格式(“orc”)。加载(“路径/”)

我得到了数据,但列标题是C1、C2、C3和C4。

你能告诉我如何读取新模式中的数据以及为什么它不起作用吗?

提前谢谢你。

共有1个答案

梁泰
2023-03-14

为什么它不起作用?

是的,这是预期的行为。给定源df有c1、c2列。。。等。<代码>。架构(…) 阅读时帮助您选择或转换某些列。仅当源中存在give列时,此操作才有效。此选项对于基于文本的格式(如csv、json、text等)非常有用。

由于您提供的列为(姓名、年龄、性别、时间)并且您的源不包含这些列,因此数据为空。

你能告诉我如何读取新模式中的数据吗

正常读取文件,

val df = spark.read.format("orc").load("path/")

显式重命名列,

val df2 = df.withColumnRenamed(c1, "Name").withColumnRenamed(c2, "Age") ...
 类似资料:
  • 当我运行以下命令时: 这些列打印为“_col0”、“_col1”、“_col2”等。而不是它们的真实名称,如“empno”、“name”、“Deptno”。 当我在Hive中“description mytable”时,它会正确打印列名,但当我运行“orcfiledump”时,它也会显示\u col0、\u col1、\u col2。我必须指定“schema on read”或其他什么吗?如果是,

  • 问题内容: 目前,我正在使用此: 但是问题在于旧文件大于新文件。因此,我最终得到了一个新文件,该文件的末尾有旧文件的一部分。 问题答案: 如果您不想关闭并重新打开文件,为避免出现竞争情况,可以这样做: 该功能将很可能也更清洁和更安全的使用作为一个上下文管理器,这将关闭该文件处理程序,即使出现错误!

  • 我有一个问题,我试图拆分一个文件沿着n个字符长度的记录为一个分布式系统。我有分解记录并将其映射到记录级别上的专有名称的功能,但需要从文件到系统,再分解文件并将其以n个长度大小的片段传递给节点进行分割和处理。

  • 我正在Java写一个程序来更新文本文档上的数据。更新由按钮(JButton)触发。 特别是,我需要区分文档中的3行: 第一个描述了一个名为“total”的浮点值 第二个描述了一个名为“fail”的浮点值 第三个描述了一个称为“rate”的双值 在程序执行期间,我希望读取文档的3行并将其分配给变量;按下按钮后,相应的变量必须覆盖文档中的值。 为了实现这一点,我的理由如下: 我声明了3个私有变量(总数

  • 问题内容: 是否可以覆盖已经在中配置的附加程序的“文件”属性,而无需创建新的附加程序?如果是的话-怎么样? 这是这种情况:我有两个apender,A1是ConsoleAppender,而A2是FileAppender。A2的“文件”指出了一个一般性error.log: 此附加程序仅记录错误级别的事件,或更糟糕的是 。 现在,我希望根据导致错误的类将这些错误写入不同的文件中,因为正在创建实例的类有多

  • 我尝试使用pyspark读取csv文件,并使用以下pyspark代码: 但是我得到了这个错误: 在collect(self)532中使用SCCallSiteSync(self._sc)作为CSS:533 sock_info=self._jdf.collectTopython()-->534返回列表(_load_from_socket(sock_info,BatchedSerializer()))5