[Spark基础]--聚合操作-reduceByKey、combineBykey、groupBy和AggregateByKey

1、Spark中的reduceByKey和CombineByKey有什么区别?

groupByKey和CombineByKey / reduceByKey有很大的区别。请参阅以下文章以深入了解

 

reduceByKey和CombineByKey之间的唯一区别是API,在内部它们的功能完全相同。

reduceByKey CombineByKey
reduceByKey在内部调用combineByKey CombineByKey是通用API,由re​​duceByKey和aggregateByKey使用
reduceByKey的输入类型和outputType是相同的 CombineByKey更灵活,因此可以提到所需的outputType。

输出类型不一定需要与输入类型相同。

 AggregateByKey内部也调用CombineByKey



2、Spark中groupByKey和ReduceByKey的区别是什么?

GroupByKey

[Spark基础]--聚合操作-reduceByKey、combineBykey、groupBy和AggregateByKey_第1张图片


ReduceByKey / CombineByKey / AggregateByKey:

        [Spark基础]--聚合操作-reduceByKey、combineBykey、groupBy和AggregateByKey_第2张图片


具体如下:

GroupByKey             ReduceByKey / CombineByKey / AggregateByKey:
  所有数据都从mapTask发送到reduceTask  合并器在MapTask和reduceTask上运行
没有优化网络I / O  优化的网络I / O
只有在reduceTask中需要给定键的所有Value时才应该使用 应该总是使用,应该避免使用groupByKey。

当需要像sum,average,median,mode,top N这样的函数时应该使用

可能导致GC问题和JobFailure 更少的数据被洗牌,所以失败的机会更少
一个火花分区可以容纳最多2 GB的数据 一个火花分区可以容纳最多2 GB的数据

 




参考:

https://github.com/vaquarkhan/vk-wiki-notes/wiki/reduceByKey--vs-groupBykey-vs-aggregateByKey-vs-combineByKey

http://www.cnblogs.com/LuisYao/p/6813228.html

https://stackoverflow.com/questions/42632707/difference-between-reducebykey-and-combinebykey-in-spark

http://bytepadding.com/big-data/spark/reducebykey-vs-combinebykey/

http://bytepadding.com/big-data/spark/groupby-vs-reducebykey/

http://bytepadding.com/big-data/spark/combine-by-key-to-find-max/


你可能感兴趣的:(Spark)