Я пытаюсь разложить столбец json в фреймворке pyspark.
Это похоже на вопрос в фрейм данных pyspark с json столбцом, чтобы агрегировать элементы json в новый столбец и удалите дублированные
, но этот новый столбец json имеет более сложную структуру.
Dataframe
year month id json_col
2010 08 5 {"my_p": [{"like": false, "p_id": "dfvefvsd"}, {"like": true, "p_id": "dvcdc"}], "p_id": "cdscas"}
Мне нужен новый столбец как:
year month id like p_id
2010 8 5 false dfvefvsd
2010 8 5 true dvcdc
2010 8 5 null cdscas
Если есть дублированные p_id в том же году, месяце, 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)
Но из json_col раскладывается только первый p_id.
спасибо