python - PySpark reduceByKey 只有一个键
问题描述
我有一个这样的rdd
// Structure List[Tuple(x1, x2, value), Tuple(x1, x2, value)]
data = [('23', '98', 34), ('23', '89', 39), ('23', '12', 30), ('24', '12', 34), ('24', '14', 37), ('24', '16', 30)]
我正在寻找最终结果是 x1 的得分最大值以及与之关联的 x2 值。像这样
data = [('23', '89', 39), ('24', '14', 37)]
我试过reduceByKey
了,但它给了我最大的每种组合,这不是我想要的。
来自评论:
这是我尝试过的:
max_by_group = (
data.map(lambda x: (x[0], x))
.reduceByKey(lambda x1, x2: max(x1, x2, key=lambda x: x[-1]))
.values()
)
解决方案
groupBy
第一个元素,然后通过元组中的第三个元素找到每个组的最大值:
(rdd.groupBy(lambda x: x[0])
.mapValues(lambda x: max(x, key=lambda y: y[2]))
.values()
).collect()
# [('24', '14', 37), ('23', '89', 39)]
或使用reduceByKey
:
(rdd.map(lambda x: (x[0], x))
.reduceByKey(lambda x, y: x if x[2] > y[2] else y)
.values()
).collect()
# [('24', '14', 37), ('23', '89', 39)]
推荐阅读
- php - PHP cURL:使用 -F 选项发出 cURL 请求
- c - 动态内存分配中填充的重要性
- javascript - 关于mongoldb中用户数据建模的探讨
- python - 将numpy数组中的线性序列转换为几何级数序列
- magento2 - 如何编辑目录产品视图?
- reactjs - Redux + React Native 将产品添加到购物车不起作用
- python - 在图像中拟合多边形并找到角度
- reactjs - Gatsby TypeError - 无法读取未定义的属性“id”
- javascript - JavaScript - 循环后我无法保存变量的值
- android - 如何关联sqlite数据库中的多个表?