Json 将数据帧的多行合并到一个记录中

Json 将数据帧的多行合并到一个记录中,json,pyspark,apache-spark-sql,Json,Pyspark,Apache Spark Sql,我需要将PySpark数据帧中的所有行合并到一个列表中,然后添加一个附加属性以批量发送到API。 以下是来自df的json的样子 {“事件类型”:“点击”、“访客平台”:“移动”、“访客国家”:“CA”、“mp操作系统”:“Android”, “用户id”:123,“用户id”:345} }{“事件类型”:“点击”,“访客平台”:“移动”,“访客国家”:“美国”,“mp操作系统”:“Android”, “用户id”:321,“用户id”:543} 添加名为load的额外属性,并将其转换为单个记录

我需要将PySpark数据帧中的所有行合并到一个列表中,然后添加一个附加属性以批量发送到API。 以下是来自df的json的样子

{“事件类型”:“点击”、“访客平台”:“移动”、“访客国家”:“CA”、“mp操作系统”:“Android”, “用户id”:123,“用户id”:345} }{“事件类型”:“点击”,“访客平台”:“移动”,“访客国家”:“美国”,“mp操作系统”:“Android”, “用户id”:321,“用户id”:543}

添加名为
load
的额外属性,并将其转换为单个记录列表

{ “荷载”:123, “事件”: [ { “事件类型”:“点击”、“访客平台”:“移动”、“访客国家”:“CA”、“mp操作系统”:“Android”, “用户id”:123,“用户id”:345} },{“事件类型”:“点击”,“访客平台”:“移动”,“访客国家”:“美国”,“mp操作系统”:“Android”, “用户id”:321,“用户id”:543} } ] }


创建一个新词典。在
events
中,可以调用
df.toJSON().collect()

df.show() +-------+------+-------------------+ |用户标识|金额|交易日期| +-------+------+-------------------+ | 101| 99.10|2019-06-04 00:00:00| | 102| 89.27|2019-06-04 00:00:00| | 102| 89.10|2019-03-04 00:00:00| | 103| 73.11|2019-09-10 00:00:00| | 101|-69.81|2019-09-11 00:00:00| | 101| 12.51|2018-12-14 00:00:00| | 101| 43.23|2018-09-11 00:00:00| +-------+------+-------------------+ >>>dict1={“加载”:123,“事件”:df.toJSON().collect()} >>>格言1 {'load':123,“events':[“{”user_id:“101”,“amount:“99.10”,“trans_date:“2019-06-04T00:00:00.000+05:30”],“{”user_id:“102”,“amount:“89.27”,“trans_date:“2019-06-04T00:00:00.000+05:30”,“{”user_id:“102”,“amount:“89.10”,“trans_date:”2019-03-04T00:00+05:30”,“user:“amount:“103”,“trans.73:”“2019-09-10T00:00:00.000+05:30”、“{”用户id:“101”、“金额”:“-69.81”、“交易日期”:“2019-09-11T00:00:00.000+05:30”、“{”用户id:“101”、“金额”:“12.51”、“交易日期”:“2018-12-14T00:00:00.000+05:30”、“{”用户id:“101”、“金额”:“43.23”、“交易日期”:“2018-09-11T00:00+05:00”] 如果您不喜欢JSON字符串代替
dict
对象,可以使用将其转换为python dict

>>> import json
>>> dict2 = {"load": 123, "events": [json.loads(x) for x in df.toJSON().collect()]}
{'load': 123, 'events': [{'user_id': '101', 'amount': '99.10', 'trans_date': '2019-06-04T00:00:00.000+05:30'}, {'user_id': '102', 'amount': '89.27', 'trans_date': '2019-06-04T00:00:00.000+05:30'}, {'user_id': '102', 'amount': '89.10', 'trans_date': '2019-03-04T00:00:00.000+05:30'}, {'user_id': '103', 'amount': '73.11', 'trans_date': '2019-09-10T00:00:00.000+05:30'}, {'user_id': '101', 'amount': '-69.81', 'trans_date': '2019-09-11T00:00:00.000+05:30'}, {'user_id': '101', 'amount': '12.51', 'trans_date': '2018-12-14T00:00:00.000+05:30'}, {'user_id': '101', 'amount': '43.23', 'trans_date': '2018-09-11T00:00:00.000+05:30'}]}


到目前为止你试过什么?