【发布时间】:2020-11-24 01:43:52
【问题描述】:
我正在尝试分解 pyspark 数据框中的 json 列。
但是这个新的 json 列有更复杂的结构。
数据框
year month id json_col
2010 08 5 {"my_p": [{"like": false, "p_id": "dfvefvsd"}, {"like": true, "p_id": "dvcdc"}], "p_id": "cdscas"}
我需要一个新的 col:
year month id like p_id
2010 8 5 false dfvefvsd
2010 8 5 true dvcdc
2010 8 5 null cdscas
如果在同一年、月、id中有重复的p_id,删除它。
从上面链接中学到的代码(感谢@Shu)
from pyspark.sql import functions as F
from pyspark.sql.types import *
t = spark.sql('select * from my_db.my_tab')
schema = ArrayType(
StructType(
[
StructField('my_p',
StructType(
[StructField('p_id', StringType(), True),
StructField('like', BooleanType(), True)
]
),
True),
StructField('p_id', StringType(), True)
]
)
)
t1 = t.withColumn('a_col', F.from_json('json_col', schema)).select('year', 'month', 'id', 'p_id', F.expr('transform(json_col, f -> f.p_id)').alias('tmp'))
t1.groupBy("year","month", 'id', 'p_id').agg(F.to_json(F.array_distinct(F.flatten(F.collect_list(F.col("tmp"))))).alias("new_col")).show(10,False)
但是,只有第一个“p_id”是从 json_col 中分解出来的。
谢谢
【问题讨论】:
-
你能发布可重现的输入数据框吗?