spark.read.schema 为数据框列值返回 null [重复]

Posted

技术标签:

【中文标题】spark.read.schema 为数据框列值返回 null [重复]【英文标题】:spark.read.schema return null for dataframe column values [duplicate] 【发布时间】:2022-01-18 05:09:18 【问题描述】:

我有一些小问题希望火花大师可以帮助我

我有镶木地板文件 person.parquet,它有一行多列。其中一列“Middle Name”在列名中有空格,这会在将其写入镶木地板格式时导致 spark 问题

我所做的是重命名列以删除空格,如下所示

SourceData = SourceData.withColumnRenamed("Middle Name","MiddleName")

如果我尝试将 SourceData 写入 parquet 文件,它仍然返回错误

Caused by: org.apache.spark.sql.AnalysisException: Attribute name "Middle Name" contains invalid character(s) among " ,;()\n\t=". Please use alias to rename it.

所以我使用下面解决问题的方法

SourceData = spark.read.schema(SourceData.schema).parquet(TestingPath)

但不幸的是,生成的文件中列 MiddleName 的值为空。

关于如何解决这个问题的任何建议?

【问题讨论】:

顺便说一句,我已经尝试过类似问题的解决方案***.com/questions/38191157/… 我找到了解决方案,即 1)使用 pandas 而不是 spark 读取 parquet 文件 2)将其转换为 spark 数据框 3)将列名中有空格的“中间名”列重命名为“ MiddleName”的想法是不要使用 spark 读取镶木地板 【参考方案1】:

尝试用一对反引号 (`) 引用列名。

`Middle Name`

【讨论】:

以上是关于spark.read.schema 为数据框列值返回 null [重复]的主要内容,如果未能解决你的问题,请参考以下文章

(Python)如何修复数据框列值中的数值表示错误

熊猫如何通过数据框列值获取行索引

如何从pyspark数据框列值中删除方括号

如何在 df.groupby 之后将数据框列值作为窗口大小传递?

数据框列值映射

使用 max() 函数的数据框列值