spark学习--grouByKey 和 reduceByKey区别及reduceByKey特点在spark调优中的利用

Spark学习---GrouByKey和reduceByKey的区别,以及reduceByKey特点在spark优化中的使用

先来一个例子:

需求:读取学生信息表到SparkContext后,分别使用GroupByKey,reduceByKey统计各班的人数

代码和结果如下:

获取SparkContext:

spark学习--grouByKey 和 reduceByKey区别及reduceByKey特点在spark调优中的利用

使用groupByKey---结果和代码放到一起截图的:

spark学习--grouByKey 和 reduceByKey区别及reduceByKey特点在spark调优中的利用

reduceByKey:

spark学习--grouByKey 和 reduceByKey区别及reduceByKey特点在spark调优中的利用

结果一样的,但是执行的过程和效率不是一样的可能,看一下groupByKey执行的中间结果,就是:

spark学习--grouByKey 和 reduceByKey区别及reduceByKey特点在spark调优中的利用

没有进行统计人数,直接把groupByKey的结果输出,可以知道:groupByKey的特点:1.懒执行 2.只能对k-v格式的RDD 3.默认是hash分区 4.groupByKey知识按照key分组,需要后序map处理。第4点是最重要的一点,groupByKey只做了分组,按照KEY分组,value值没有给他相加,只是放到一起,形成数组而已

但是,ReduceByKey,就不一样了,它会进行预处理,就是他也是按照key值分组,key值相同的value他直接他这些value相加,形成新的一个总的value---这个预处理真的是好,因为在spark调优时,都是使用reduceByKey,这里多说一点:spark调优:--【reduceByKey:要把分布在集群各个节点上的数据中的同一个key,对应的values,都给 集中到一个节点的一个executor的一个task中,对集合起来的value执行传入的函数进行 reduce操作,最后变成一个value---这属于spark调优的shuffle优化,这样就避免了shuffle,提高了spark执行的效率

文字可能不好理解,这个逗比的图画的不错,可以一看:https://blog.****.net/u012957549/article/details/79704831