groupby和reduceby的区别
目录
rdd 里面 groupby
和 reduceby
有什么区别。
reduceByKey 的泛型参数是 [V]
,而 groupByKey 的泛型参数是 [CompactBuffer[V]]
。这直接导致了 reduceByKey
和 groupByKey
的返回值不同,前者是 RDD[(K, V)]
,而后者是 RDD[(K, Iterable[V])]
然后就是 mapSideCombine=false
了,这个 mapSideCombine 参数的默认是 true 的。这个值有什么用呢,上面也说了,这个参数的作用是控制要不要在 map端进行初步合并。可以看看下面具体的例子。
从功能上来说,可以发现 ReduceByKey
其实就是会在每个节点先进行一次合并的操作,而 groupByKey
没有。
这么来看 ReduceByKey
的性能会比 groupByKey
好很多,因为有些工作在节点已经处理了。
- reduceByKey:按照 key 进行聚合,在 shuffle 之前有
combine
(预聚合)操作,返回结果是RDD[k,v]
。 - groupByKey:按照 key 进行分组,直接进行 shuffle。
- 开发指导:reduceByKey 比 groupByKey,建议使用。但是需要注意是否会影响业务逻辑。