【问题标题】:Pyspark split array of JSON objects column to multiple columnsPyspark将JSON对象列拆分为多列
【发布时间】:2021-06-30 11:11:42
【问题描述】:

我有一个 pyspark 数据框,其中一列的格式如下:

[{key1: value1},{key2:value2}, {key3:value3}, {key4:value4}]

让我们将其称为 ColumnY,如下所示:

ColumnY
[{key1: value1},{key2:value2}, {key3:value3}, {key4:value4}]

我想将其转换为数据框的列,其中列名为 keyX,其内容为 valueX,其中 X=[1,4] 如下:

key 1 key 2 key 3 key 4
value1 value2 value3 value4

我尝试了一些解决方案,但没有奏效。如果有的话,请您分享任何想法或解决方案。提前谢谢你。

【问题讨论】:

    标签: python json apache-spark pyspark apache-spark-sql


    【解决方案1】:

    这是一个格式非常糟糕的 JSON,没有任何引号,但您仍然可以通过蛮力解析它:

    import pyspark.sql.functions as F
    
    df2 = df.selectExpr("""
        explode(
            transform(
                split(ColumnY, ','), 
                x -> str_to_map(regexp_replace(x, '[\\\\[\\\\{ \\\\]\\\\}]', ''), ' ', ':')
            )
        ) as col
    """).select(F.explode('col')).groupBy().pivot('key').agg(F.first('value'))
    
    df2.show()
    +------+------+------+------+
    |  key1|  key2|  key3|  key4|
    +------+------+------+------+
    |value1|value2|value3|value4|
    +------+------+------+------+
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-11-10
      • 1970-01-01
      • 2020-12-19
      • 2018-12-06
      • 2018-01-29
      • 2020-04-24
      • 2022-12-12
      相关资源
      最近更新 更多