Json 将数据帧的多行合并到一个记录中
我需要将PySpark数据帧中的所有行合并到一个列表中,然后添加一个附加属性以批量发送到API。 以下是来自df的json的样子 {“事件类型”:“点击”、“访客平台”:“移动”、“访客国家”:“CA”、“mp操作系统”:“Android”, “用户id”:123,“用户id”:345} }{“事件类型”:“点击”,“访客平台”:“移动”,“访客国家”:“美国”,“mp操作系统”:“Android”, “用户id”:321,“用户id”:543} 添加名为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的额外属性,并将其转换为单个记录
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'}]}
到目前为止你试过什么?