Pyspark将JSON对象列拆分为多列
Posted
技术标签:
【中文标题】Pyspark将JSON对象列拆分为多列【英文标题】:Pyspark split array of JSON objects column to multiple columns 【发布时间】: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 |
我尝试了一些解决方案,但没有奏效。如果有的话,请您分享任何想法或解决方案。提前谢谢你。
【问题讨论】:
【参考方案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|
+------+------+------+------+
【讨论】:
以上是关于Pyspark将JSON对象列拆分为多列的主要内容,如果未能解决你的问题,请参考以下文章
将包含 json 数据的 pandas 数据框的列拆分为多列
pySpark - 在插入数据库之前将整个数据框列转换为 JSON 对象
在 pyspark 的 StructStreaming 中;如何将 DataFrame 中的每一行(json 格式的字符串)转换为多列