pyspark - Spark dataframe 列拒绝重命名

我有一个 Spark dataframe df 恰好有一列名为“我的列名”。它是通过读入 parquet 文件创建的。

[编辑] parquet 文件是通过读取名为 test.csv 的 CSV 文件创建的,该文件包含以下内容:

My Column Name
test1
test2

并使用 pandas pd.to_parquet("test.parquet") [/edit] 将其写入名为 test.parquet 的镶木地板文件

printSchema 函数返回:

>>> df.printSchema()
root
 |-- My Column Name: string (nullable = true)

我使用应用于 df 的 withColumnRenamed 创建另一个 dataframe new_df

>>> new_df = df.withColumnRenamed("My Column Name", "my_column_name")
>>> new_df.printSchema()
root
 |-- my_column_name: string (nullable = true)

当我尝试在 ```new_df`` 中显示 values 时,我收到一个引用旧列名的错误:

>>> new_df.show(2)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/opt/anaconda3/lib/python3.7/site-packages/pyspark/sql/dataframe.py", line 484, in show
    print(self._jdf.showString(n, 20, vertical))
  File "/opt/anaconda3/lib/python3.7/site-packages/py4j/java_gateway.py", line 1305, in __call__
    answer, self.gateway_client, self.target_id, self.name)
  File "/opt/anaconda3/lib/python3.7/site-packages/pyspark/sql/utils.py", line 117, in deco
    raise converted from None
pyspark.sql.utils.AnalysisException: Attribute name "My Column Name" contains invalid character(s) among " ,;{}()\n\t=". Please use alias to rename it.

我尝试了多种其他方法来重命名列(创建一个临时视图并使用 alias() 函数选择具有别名的列)并且都导致相同的结果。我错过了什么?

回答1

正如https://stackoverflow.com/questions/45804534/pyspark-org-apache-spark-sql-analysisexception-attribute-name-contains-inv所述,您必须将重命名的列分配给原始 df:

df = df.withColumnRenamed("My Column Name", "my_column_name")

而不是创建 new_df。

相似文章

最新文章