如何在Code Workbook中将JSON对象列表转换为Spark数据框?

问题描述

如何将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)