【问题标题】:Using alias to rename pyspark columns使用别名重命名 pyspark 列
【发布时间】:2023-04-02 21:34:01
【问题描述】:

我正在尝试在 Databricks (pyspark) 中导入 parquet 文件并不断收到错误

df = spark.read.parquet(inputFilePath)

AnalysisException:  Column name "('my data (beta)', "Meas'd Qty")" contains invalid character(s). Please use alias to rename it. 

我尝试了this post 中的建议,使用.withColumnRenamed 就像this post 一样,也使用alias 就像

(spark.read.parquet(inputFilePath)).select(col("('my data (beta)', "Meas'd Qty")").alias("col")).show()

但总是得到同样的错误。如何遍历每一列以用下划线 _ 替换任何无效字符,甚至删除所有无效字符?

【问题讨论】:

  • 谢谢,我都试过了,但得到了同样的错误 - 错误发生在 spark.read.parquet(inputFilePath) 行,我所做的似乎没有给我不同的结果
  • 你可以试试 df = df.withColumnRenamed("Foo Bar", "foobar") 。删除列中的额外空间
  • 就像我说的,我在这样做时遇到了同样的错误
  • 您能否提供示例输入文件以更清楚地了解列名?

标签: python pyspark


【解决方案1】:

旧文件是如何生成的?该文件使用 spark 不允许的列名保存。

最好在生成此文件时从源头解决此问题。

您可以在 spark 中尝试解决的几种方法是

  1. 在 select 语句中将列名放入 ``like
(spark.read.parquet(inputFilePath)).select(col(`('my data (beta)', "Meas'd Qty")`).alias("col")).show()
  1. 尝试使用toDF 重命名。您需要在输出 df 中传递所有列名。
(spark.read.parquet(inputFilePath)).toDF(["col_a", "col_b", ...]).show()
  1. 尝试使用 pyarrow 读取文件并重构列并保存结果。之后使用 pysaprk 阅读并继续您的任务。

【讨论】:

  • 原始文件来自数据库,我无法控制格式... 1. `` 出现无效语法错误 2. 输入列名时出现无效语法错误""
  • 源中的列名到底是什么?
  • 它实际上是一个多索引 - 当我在 databricks 外部导入 parquet 文件时,我可以看到列名:MultiIndex([('my data (alpha)', 'Meas'd Qty'), ('my data (alpha)', 'Sch Qty'), ('my data (beta)', 'Meas'd Qty'), ...
  • 方法 #3,尝试使用 pyarrow 读取文件并重构列并保存结果。之后使用 pyspark 阅读并继续您的任务。
  • 谢谢,我会试试的。令人失望的是,databricks 无法解析多索引 parquet 文件
猜你喜欢
  • 2022-10-05
  • 2016-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-11
  • 2022-01-04
  • 2020-10-12
相关资源
最近更新 更多