使用PySpark读取.ORC文件时,即使显式指定的标头也丢失

时间:2018-07-31 22:45:42

标签: python apache-spark 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)

其中defined_schema是使用StructTypesStructFields构造的有效架构-但结果始终是相同的,数据帧类似于上面的示例。我知道我可以使用withColumnRenamed来将它们强制为某些字符串,但这感觉很hacky,鉴于文件中的标头,这应该是不必要的。我在这里想念什么?

1 个答案:

答案 0 :(得分:1)

这应该是开箱即用的,您不需要任何参数。 (如果未提供模式,则OrcRelation类将负责推断模式。)而且,列名永远不应以行结尾。您应该检查输入文件,几乎可以确定问题出在哪里。