如何将包含序列化json的spark数据框列转换为数据框本身?

时间:2019-01-10 19:54:45

标签: json apache-spark pyspark

原因,我认为这不是this question的重复:

  • from_json需要事前了解json模式,而我不了解
  • get_json_object-我试图使用它,但是运行get_json_object的结果本身就是一个字符串,使我回到第一个平方。此外,(从exprs语句来看),作者再次希望事前了解架构,而不是在推断架构。

要求:

  • 事前,我不知道json模式是什么,因此需要进行推断。 spark.read.json似乎是推断架构的最佳情况,但是我遇到的所有示例都从文件加载了json。在我的用例中,json包含在数据框的一列中。

  • 我与源文件类型无关(在这种情况下,已使用parquet和csv测试)。但是,源数据帧架构已经并且将具有良好的结构。对于我的用例,json包含在源数据帧中称为“字段”的列中。

  • 生成的数据框应链接到源数据框的主键(在我的示例中为“ id”)。

1 个答案:

答案 0 :(得分:1)

该键原来是in the spark source codepath传递给spark.read.json时,可能是“存储json对象的字符串的RDD”。

来源dataframe schema

我想到的代码是:

def inject_id(row):
    js = json.loads(row['fields'])
    js['id'] = row['id']
    return json.dumps(js)
json_df = spark.read.json(df.rdd.map(inject_id))

json_df然后有一个架构as such

请注意-我并未使用更嵌套的结构对其进行测试,但我相信它将支持spark.read.json支持的任何内容。