我想对每个键的值列表进行分组,并执行如下操作:
sc.parallelize(Array(("red", "zero"), ("yellow", "one"), ("red", "two"))).groupByKey().collect.foreach(println)
(red,CompactBuffer(zero, two))
(yellow,CompactBuffer(one))
但我注意到databricks的一篇博文,它建议不要对大型数据集使用groupbykey。
避免groupbykey
有没有一种方法可以使用reducebykey获得相同的结果?
我试过这个,但是它连接了所有的值。顺便说一下,在我的例子中,键和值都是字符串类型。
sc.parallelize(Array(("red", "zero"), ("yellow", "one"), ("red", "two"))).reduceByKey(_ ++ _).collect.foreach(println)
(red,zerotwo)
(yellow,one)
2条答案
按热度按时间xyhw6mcr1#
polhcujo2#
使用
aggregateByKey
:有关详细信息,请参阅此答案
aggregateByKey
,这是使用可变数据集背后的基本原理的链接ListBuffer
.编辑:
Is there a way to achieve the same result using reduceByKey?
以上事实上性能更差,详情请参见@zero323的评论。