【问题标题】:How can I convert a spark dataframe column, containing serialized json, into a dataframe itself?如何将包含序列化 json 的 spark 数据框列转换为数据框本身?
【发布时间】:2019-06-05 18:09:46
【问题描述】:

我觉得这不是 this question 的复制品的原因:

  • from_json 需要事先了解 json 架构,而我不知道
  • get_json_object - 我尝试使用它,但运行 get_json_object 的结果本身就是一个字符串,让我回到原点。此外,似乎(来自exprs 声明) - 再次 - 作者期望事先了解架构,而不是推断架构。

要求:

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

  • 我不知道源文件类型(在这种情况下,使用 parquet 和 csv 进行测试)。但是,源数据框架构是并且将是结构良好的。对于我的用例,json 包含在源数据框中称为“字段”的列中。

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

【问题讨论】:

  • 原因我觉得这不是重复的:from_json 需要事先了解架构,而我不知道 get_json_object - 我尝试使用它,但我不知道如何使用使用从这个中提取的值到它自己的数据帧中

标签: json apache-spark pyspark


【解决方案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 支持的任何内容。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-07
    • 1970-01-01
    • 1970-01-01
    • 2021-11-26
    • 2016-02-17
    • 2017-06-11
    相关资源
    最近更新 更多