Headers 即使在使用 PySpark 读取 .ORC 文件时明确指定也会丢失
Headers missing even if explicitly specified when reading .ORC file with PySpark
这似乎是一个没有明确解决方案的小问题。我有一个 ORC 文件,如果将其表示为 CSV 文件,它将如下所示:
Animal,Name
Dog,Valentino
Cat,Meowser
等等。我可以在 .orc
文件中读取以下行:
df_animals = spark.read.orc(path="animals.orc")
在某种意义上它产生了一个有效的数据帧,但它在数据中包含了 headers,就好像它们是数据一样,产生了以下数据帧:
+---------+---------------+
| _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
来强制它们使用某些字符串,但是感觉很老套,并且考虑到文件中的 headers 应该是不必要的。我在这里错过了什么?
这应该开箱即用,您不需要任何参数。 (如果未提供,OrcRelation class 会负责推断模式。)并且您的列名永远不应在行中结束。你应该检查你的输入文件,问题几乎肯定在那里。
这似乎是一个没有明确解决方案的小问题。我有一个 ORC 文件,如果将其表示为 CSV 文件,它将如下所示:
Animal,Name
Dog,Valentino
Cat,Meowser
等等。我可以在 .orc
文件中读取以下行:
df_animals = spark.read.orc(path="animals.orc")
在某种意义上它产生了一个有效的数据帧,但它在数据中包含了 headers,就好像它们是数据一样,产生了以下数据帧:
+---------+---------------+
| _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
来强制它们使用某些字符串,但是感觉很老套,并且考虑到文件中的 headers 应该是不必要的。我在这里错过了什么?
这应该开箱即用,您不需要任何参数。 (如果未提供,OrcRelation class 会负责推断模式。)并且您的列名永远不应在行中结束。你应该检查你的输入文件,问题几乎肯定在那里。