繁体   English   中英

在 Spark RDD 中聚合 JSON 文件

[英]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 帧,其中包含两列idtransactions ,其中transactions是 StructType。

我希望能够“映射”每个用户的transactions以聚合它们。

目前我正在使用 rdd 和一个看起来像这样的 function:

users.rdd.map(lambda a: summarize_transactions(a.transactions))

总结 function 可以有两种类型:
a) 将对象列表转换为 Pandas Dataframe 进行总结。
b) 遍历对象列表以对其进行总结。

但是我发现a.transactionspyspark.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM