【问题标题】:Pyspark explode string column containing JSON nested in array laterallyPyspark 分解包含横向嵌套在数组中的 JSON 的字符串列
【发布时间】:2022-12-13 02:43:46
【问题描述】:

我有一个包含如下列的数据框:

df['指标'] = [{id=1,name=XYZ,value=3}, {id=2,name=KJH,value=2}] [{id=4,name=ABC,value=7}, {id=8,name=HGS,value=9}]

该列是 String 类型,我正在尝试使用以下方法分解该列:

    from pyspark.sql import functions as F
from pyspark.sql.types import ArrayType

array_item_schema = spark.read.json(df.rdd.map(lambda row: row['metrics'])).schema

json_array_schema = ArrayType(array_item_schema, True)

arrays_df = df.select(F.from_json('metrics', json_array_schema).alias('json_arrays'))

objects_df = arrays_df.select(F.explode('json_arrays').alias('objects'))

但是,当我尝试时返回了一个空值

objects_df.show()

我正在寻找的输出是“指标”列中每个元素的单独列表,列名称在同一数据框中显示 id、名称、值,但不知道从哪里开始对其进行解码。谢谢您的帮助!

【问题讨论】:

  • @MohanaBC 此处显示的代码在 pyspark 中抛出“无效语法”...
  • 那是 scala 代码,将其转换为 python 语法。 pyspark 和 spark-scala 中的方法名称相同。
  • 我很少接触 spark scala,所以在这里迷路了。在转换该代码时,我们将不胜感激!

标签: python json pyspark apache-spark-sql


【解决方案1】:

您可以使用 schema_of_json 函数从 JSON 字符串中获取模式并将其传递给 from_json 函数获取结构类型。

  json_array_schema = schema_of_json(str(df.select("metrics").first()[0]))
  arrays_df = df.select(from_json('metrics', json_array_schema).alias('json_arrays'))

【讨论】:

    猜你喜欢
    • 2021-08-07
    • 2018-09-26
    • 1970-01-01
    • 2021-11-17
    • 1970-01-01
    • 1970-01-01
    • 2020-12-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多