cogroup和groupByKey区别

文章详细介绍了ApacheSpark中的cogroup和groupByKey操作。cogroup用于将两个RDD中相同键的值组合成迭代器对,而groupByKey则是将一个RDD中相同键的值聚合为一个迭代器。两者的应用场景和结果形式有所不同,cogroup适用于需要处理来自多个源的数据,而groupByKey则更专注于单个数据源的键值聚合。此外,文章还提到了groupBy的灵活性以及reduceByKey的功能。

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

6. cogroup和groupByKey区别
6.1 cogroup()
同一个rdd中, 相同k的value迭代组成迭代器k,(Iterator[v],Iterator[w])
依赖于两个rdd
举例: rdd.cogroup(rdd2)

val rdd9: RDD[(String, Any)] = sc.parallelize(List((“tom”, “aa”),(“tom”, 1), (“tom”, “bb”),(“jerry”, 3), (“kitty”, 2)))
val rdd10 = sc.parallelize(List((“jerry”, 2), (“tom”, 1), (“shuke”, 2)))
val cogroup: RDD[(String, (Iterable[Any], Iterable[Int]))] = rdd9.cogroup(rdd10)

val c9: Array[(String, (Iterable[Any], Iterable[Int]))] = cogroup.collect()
//结果
ArrayBuffer((tom,(CompactBuffer(aa, 1, bb),CompactBuffer(1))), (jerry,(CompactBuffer(3),CompactBuffer(2))), (shuke,(CompactBuffer(),CompactBuffer(2))), (kitty,(CompactBuffer(2),CompactBuffer())))

6.2 groupByKey()
不依赖多个RDD,一个rdd执行起来的算子
求一个集合的相同k合并后的value, shuffle阶段, 得到的value是迭代器 rdd.groupByKey()得到的是 Array(k, Iterator[v])

val rdd7: RDD[(String, Any)] = sc.parallelize(List((“tom”, “aa”),(“tom”, 1), (“tom”, “bb”),(“jerry”, 3), (“kitty”, 2)))
val key: RDD[(String, Iterable[Any])] = rdd7.groupByKey()
val c77: Array[(String, Iterable[Any])] = key.collect()
//结果
ArrayBuffer((tom,CompactBuffer(aa, 1, bb)), (jerry,CompactBuffer(3)), (kitty,CompactBuffer(2)))

7. groupBy(): Iterator(k,v) VS groupByKey(): Iterator[v]

groupBy()更加灵活 返回的是 k, Iterator(k,v)

ArrayBuffer((tom,CompactBuffer((tom,aa), (tom,1), (tom,bb))), (jerry,CompactBuffer((jerry,3))), (kitty,CompactBuffer((kitty,2))))

ReduceByKey 按照相同的key进行分组聚合,聚合的运算逻辑由你写

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值