问题描述
如何将JSON对象列表转换为Spark数据框?
[
{
'1': 'A','2': 'B'
},{
'1': 'A','3': 'C'
}
]
进入
1 2 3
A B null
A null C
我尝试了spark.read.json(spark.sparkContext.parallelize(d))
及其与json.dumps(d)
的各种组合。
解决方法
您可以使用spark.createDataFrame(d)
获得所需的效果。
您会收到关于从字典推断架构的弃用警告,因此“正确”的方法是首先创建行:
from pyspark.sql import Row
data = [{'1': 'A','2': 'B'},{'1': 'A','3': 'C'}]
schema = ['1','2','3']
rows = []
for d in data:
dict_for_row = {k: d.get(k,None) for k in schema}
rows.append(Row(**dict_for_row))
然后创建DataFrame:
df = spark.createDataFrame(row)