[英]Aggregate JSON files in Spark RDD
我有一系列与此类似的文件:
[
{
'id':1,
'transactions': [
{
'date': '2019-01-01',
'amount': 50.50
},
{
'date': '2019-01-02',
'amount': 10.20
},
]
},
{
'id':2,
'transactions': [
{
'date': '2019-01-01',
'amount': 10.20
},
{
'date': '2019-01-02',
'amount': 0.50
},
]
}
]
我使用以下代码将这些文件加载到 Spark
users= spark.read.option("multiline", "true").json(file_location)
结果是一个 SparkData 帧,其中包含两列id
和transactions
,其中transactions
是 StructType。
我希望能够“映射”每个用户的transactions
以聚合它们。
目前我正在使用 rdd 和一个看起来像这样的 function:
users.rdd.map(lambda a: summarize_transactions(a.transactions))
总结 function 可以有两种类型:
a) 将对象列表转换为 Pandas Dataframe 进行总结。
b) 遍历对象列表以对其进行总结。
但是我发现a.transactions
是pyspark.sql.types.Row
的列表。 而不是实际的字典。
1)这是实现我的目标的最佳方式吗?
2) 如何将 Spark Rows 列表转换为字典的原始列表?
我找到了解决自己问题的方法:
第 1 步:将数据加载为文本文件:
step1= sc.textFile(file_location)
第 2 步:读作 JSON 和平面图
import json
step2 = step1.map(lambda a: json.loads(a)).flatMap(lambda a: a)
第 3 步:密钥 MAP 减少
setp3 = (
step2
.map(lambda line: [line['id'], line['transactions']])
.reduceByKey(lambda a, b: a + b)
.mapValues(lambda a: summarize_transactions(a))
)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.