python - 使用 PySpark 读取 .ORC 文件时,即使明确指定,也会丢失 header

标签 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=define_schema)

其中define_schema是使用StructTypesStructFields构造的有效模式 - 但结果始终相同,一个看起来像的数据帧上面的例子。我知道我可以使用 withColumnRenamed 来强制它们使用某些字符串,但这感觉很奇怪,并且考虑到文件中的标题,应该是不必要的。我在这里缺少什么?

最佳答案

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

关于python - 使用 PySpark 读取 .ORC 文件时,即使明确指定,也会丢失 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51623121/

相关文章:

python - 优化使用数组索引作为函数的嵌套 for 循环

python - 如何使用列号引用而不是列名称删除列或重新排序 Python Spark

python - 在 Spacy 中检测引理后的停用词

java - 在 Apache Spark 中插入查询花费太多时间

scala - LDA 交叉验证评估器

apache-spark - 胶水dpu和最大并发的关系

python - randomSplit pyspark 更改数据帧的值

python - Pyspark MLlib 中的自定义算法 : 'function' object has no attribute '_input_kwargs'

python - 通过 Google Cloud Endpoints 将 UIImage 上传到 AWS S3

Python 正则表达式列表使用列表