spark学习--grouByKey 和 reduceByKey区别及reduceByKey特点在spark调优中的利用
Spark学习---GrouByKey和reduceByKey的区别,以及reduceByKey特点在spark优化中的使用
先来一个例子:
需求:读取学生信息表到SparkContext后,分别使用GroupByKey,reduceByKey统计各班的人数
代码和结果如下:
获取SparkContext:
使用groupByKey---结果和代码放到一起截图的:
reduceByKey:
结果一样的,但是执行的过程和效率不是一样的可能,看一下groupByKey执行的中间结果,就是:
没有进行统计人数,直接把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