我有一个形状像这样的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列表达式中引用名称中带有连字符的列?
正如你所知,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"))