python - 使用 groupBy 获取 rdd 列的总和和长度?
问题描述
我有以下RDD:
[(1, 300), (4, 60), (4, 20), (2, 2), (2, 3), (2, 5)]
我预期的 RDD 是:
[(1,[300, 1]), (2,[10, 3]), (4,[80,2])]
元组中列表中的第一个值是总和(例如,对于 2:它的 2+3+5 = 10),第二个值是第一个值。发生次数(例如 1 发生一次)。使用 groupBy 函数可以实现预期的 RDD 吗?
解决方案
您可以将每个值映射到一个列表[x, 1]
,然后对每个键的所有列表求和。
rdd = sc.parallelize([(1, 300), (4, 60), (4, 20), (2, 2), (2, 3), (2, 5)])
result = rdd.mapValues(lambda x: [x, 1]).reduceByKey(lambda x, y: [x[0] + y[0], x[1] + y[1]])
result.collect()
# [(1, [300, 1]), (2, [10, 3]), (4, [80, 2])]
推荐阅读
- u-sql - 带日期的输入文件路径 ADFV2
- javascript - javascript - 中止脚本执行超时?
- c# - JsonReaderException:解析值时遇到意外字符:<。路径 '',第 0 行,第 0 位置
- mule - 在 DataWeave 中将 XML 映射到 JSON 的嵌套元素
- swift - Firebase 方法错误 - Xcode Swift -
- javascript - Nodemon 崩溃并显示等待文件更改
- python - 在pyspark中指定多列数据类型更改为不同数据类型
- c# - 使用c#(使用Microsoft.SharePoint.Client)在线向sharepoint中的任务添加子任务
- python - 验证后使用 Python 请求下载 CSV 文件
- javascript - 单击时禁用提交按钮不会提交表单