pyspark将json对象的数组列拆分为多个列

pbpqsu0x  于 2021-07-09  发布在  Spark
关注(0)|答案(1)|浏览(337)

我有一个pysparkDataframe,其中一列的格式如下:
[{key1:value1},{key2:value2},{key3:value3},{key4:value4}]
我们可以这样说:
列[{key1:value1},{key2:value2},{key3:value3},{key4:value4}]
我想将其转换为dataframe的列,其中列名为keyx,内容为valuex,其中x=[1,4],如下所示:
键1键2键3键4值1值2值3值4
我试过一些解决办法,但都不管用。如果您有任何想法或解决方案,请与我们分享。先谢谢你。

oiopk7p5

oiopk7p51#

这是一个格式非常糟糕的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|
+------+------+------+------+

相关问题