这似乎是一个小问题,没有明确的解决方案。我有一个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
是使用StructTypes
和StructFields
构造的有效架构-但结果始终是相同的,数据帧类似于上面的示例。我知道我可以使用withColumnRenamed
来将它们强制为某些字符串,但这感觉很hacky,鉴于文件中的标头,这应该是不必要的。我在这里想念什么?
答案 0 :(得分:1)
这应该是开箱即用的,您不需要任何参数。 (如果未提供模式,则OrcRelation类将负责推断模式。)而且,列名永远不应以行结尾。您应该检查输入文件,几乎可以确定问题出在哪里。