reduceByKey实现(key,value)生成(key,list(value))

博客介绍了在大数据处理中,如何使用`reduceByKey`替代`groupByKey`来避免大量节点间的数据传输,提高性能。内容包括:由于value是字符串,不能直接相加,所以通过先将value转化为List,然后利用`:::`追加运算符在`reduceByKey`中进行List合并。最终达到相同于`groupByKey`的效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

sc.parallelize(Array(("red", "zero"), ("yellow", "one"), ("red", "two"))).groupByKey().collect.foreach(println)

(red,CompactBuffer(zero, two))
(yellow,CompactBuffer(one))

实现red 聚合[zero,two],yellow聚合[one]。但是groupbykey涉及大量的节点间数据传输。在数据量较大的情况下,有性能损失。
在这里插入图片描述

解决方法:

可以考虑使用reduceByKey.但由于value值类型为string,和传统数字求和不同(直接reduceByKey(+))。
为了保证value值可以“相加”,故先List化,然后使用:::List追加运算符(scala),即map(t=>( t.1,List(t.2))).reduceByKey(:::).

结果如下:

sc.parallelize(Array(("red", "zero"), ("yellow", "one"), ("red", "two")))
.map(t => (t._1,List(t._2)))
.reduceByKey(_:::_)
.collect()

同样可以实现相同效果

Array[(String, List[String])] = Array((red,List(zero, two)), (yellow,List(one)))

https://stackoverflow.com/questions/37580303/using-reducebykey-to-group-list-of-values/56574867#56574867
https://www.cnblogs.com/zzhangyuhang/p/9001523.html

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值