使用PySpark读取.ORC文件时,即使明确指定了标头,也会丢失标头



这似乎是一个没有明确解决方案的琐碎问题。我有一个ORC文件,如果它被表示为CSV文件,它看起来像这样:

Animal,Name
Dog,Valentino
Cat,Meowser

等等。我可以在中的.orc文件中读取以下行:

df_animals = spark.read.orc(path="animals.orc")

从某种意义上说,它生成了一个有效的数据帧,但它在数据中包含了标头,就好像它们是数据一样,从而生成了以下数据帧:

+---------+---------------+
|      _c0|            _c1|
+---------+---------------+
|   Animal|           Name|
|      Dog|      Valentino|
|      Cat|        Meowser|

很明显,这不是我所需要的,因为我将无法引用任何实际的列名。然而,我尝试过:

spark.read.option("inferSchema", True).orc("animals.orc")

spark.read.option("header", True).orc("animals.orc")

spark.read.format("orc").load("animals.orc", schema=defined_schema)

其中CCD_ 6是使用CCD_;StructFields-但结果总是一样的,数据帧看起来像上面的例子。我知道我可以使用withColumnRenamed将它们强制为某些字符串,但这感觉很粗糙,考虑到文件中的头,应该没有必要。我在这里错过了什么?

这应该是开箱即用的,不需要任何参数。(如果没有提供模式,OrcRelation类会负责推断模式。(而且列名永远不应该出现在行中。你应该检查你的输入文件,问题几乎肯定存在。

相关内容

  • 没有找到相关文章

最新更新