我有一个类似这样的json文档(请注意,这个模式不在我的控制之下-我无法去掉键中的连字符):
{ "col1": "value1", "dictionary-a": { "col2": "value2" } }
session.read.json(...) 要将此json读入数据帧(名为“df”),请执行以下操作:
session.read.json(...)
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 .
df.dictionary-a.col2
df.dictionary - a.col2
相反,你可以使用 pyspark.sql.functions.col pyspark.sql.Column.getItem 通过键访问字典的元素。
pyspark.sql.functions.col
pyspark.sql.Column.getItem
尝试:
from pyspark.sql.functions import col df2 = df.withColumn("col2", col("dictionary-a").getItem("col2"))