如何在pyspark列表达式中引用名称中带有连字符的列?

问题描述 投票:2回答:1

我有一个形状像这样的json文档(请注意,这个架构不在我的控制之下 - 我不能去掉键中的连字符):

{
   "col1": "value1",
   "dictionary-a": {
      "col2": "value2"
   }
}

我使用session.read.json(...)将这个json读入数据帧(名为'df'),如下所示:

df = session.read.json('/path/to/json.json')

我想做这个:

df2 = df.withColumn("col2", df.dictionary-a.col2)

我收到错误:

AttributeError: 'DataFrame' object has no attribute 'dictionary'

如何在pyspark列表达式中引用名称中带有连字符的列?

python apache-spark pyspark apache-spark-sql pyspark-sql
1个回答
2
投票

正如你所知,df.dictionary-a.col2中的连字符被评估为减法:df.dictionary - a.col2

相反,您可以使用pyspark.sql.functions.col按名称引用列,使用pyspark.sql.Column.getItem按键访问字典元素。

尝试:

from pyspark.sql.functions import col
df2 = df.withColumn("col2", col("dictionary-a").getItem("col2"))
© www.soinside.com 2019 - 2024. All rights reserved.