Python 如何从PySpark中的多列创建字典列表,其中key是一个列名,value是该列';s值多少?

Python 如何从PySpark中的多列创建字典列表,其中key是一个列名,value是该列';s值多少?,python,apache-spark,dictionary,pyspark,apache-spark-sql,Python,Apache Spark,Dictionary,Pyspark,Apache Spark Sql,考虑一个示例数据帧,例如df: user_id | item_id | item_param1 | item_param2 | 1 a 10 20 1 b 30 40 2 b 50 60 2 c 70 80 从这个数据框df,我想为每一行用户

考虑一个示例数据帧,例如
df

user_id | item_id | item_param1 | item_param2 |
  1          a           10            20
  1          b           30            40
  2          b           50            60
  2          c           70            80
从这个数据框
df
,我想为每一行
用户id
收集所有
项目及其属性
项目参数
,因此输出为:

user_id |    values
------------------------------------------------
  1     |   [{'a': {'item_param1': 10, 'item_param2': 20}}, {'b': {'item_param1': 30, 'item_param2': 40}}]
  2     |   [{'b': {'item_param1': 50, 'item_param2': 60}}, {'c': {'item_param1': 70, 'item_param2': 80}}]

我需要使用
groupBy('user\u id')
,然后使用某种形式的
collect\u list
来获取字典列表。

您可以在
项目id->struct
的地图上使用
collect\u list

import pyspark.sql.functions as F

df2 = df.groupBy('user_id').agg(
    F.to_json(
        F.collect_list(
            F.create_map(
                'item_id', 
                F.struct('item_param1', 'item_param2')
            )
        )
    ).alias('values')
)

df2.show(truncate=False)
+-------+-------------------------------------------------------------------------------------+
|user_id|values                                                                               |
+-------+-------------------------------------------------------------------------------------+
|1      |[{"a":{"item_param1":10,"item_param2":20}},{"b":{"item_param1":30,"item_param2":40}}]|
|2      |[{"b":{"item_param1":50,"item_param2":60}},{"c":{"item_param1":70,"item_param2":80}}]|
+-------+-------------------------------------------------------------------------------------+