Python 即使在使用PySpark读取.ORC文件时显式指定了头,也会丢失

Python 即使在使用PySpark读取.ORC文件时显式指定了头,也会丢失,python,apache-spark,pyspark,orc,Python,Apache Spark,Pyspark,Orc,这似乎是一个没有明确解决方案的小问题。我有一个ORC文件,如果它被表示为CSV文件,将如下所示: Animal,Name Dog,Valentino Cat,Meowser 等等。我可以读取.orc文件中的以下行: df_animals=spark.read.orc(path=“animals.orc”) 从某种意义上说,它生成一个有效的数据帧,但它在数据中包含头,就像它们是数据一样,从而生成以下数据帧: +---------+---------------+ | _c0|

这似乎是一个没有明确解决方案的小问题。我有一个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(“anists.orc”)

spark.read.option(“header”,True).orc(“anists.orc”)

spark.read.format(“orc”).load(“anives.orc”,schema=defined\u schema)


其中,
defined\u schema
是使用
StructTypes
StructFields
构造的有效模式,但结果总是相同的,一个类似于上面示例的数据帧。我知道我可以使用
with column renamed
将它们强制为某些字符串,但这感觉有点粗糙,而且考虑到文件中的标题,应该没有必要。我这里缺少什么?

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

我对ORC没有什么经验,但我经常使用拼花地板,我的经验是元数据(如列名)保存在单独的文件中。这是正确的。在从原始CSV生成ORC文件时,我在读取原始CSV时没有使用
headers=True
标志。一旦我做了更改,ORC文件就有了正确的头。