1. groupByKey
rdd.groupByKey().map(x=>(x._1,x._2.sum)).foreach(println)
2. reduceByKey
rdd.reduceByKey(_ + _).foreach(println)
总结:
① 从shuffle的角度:reduceByKey和groupByKey都存在shuffle的操作,但是reduceByKey可以在shuffle前对分区内相同key的数据进行预聚合功能,这样会减少落盘的数据量,而groupByKey只是进行分组,不存在数据量减少的问题。
② 从功能角度:reduceByKey其实包含分组和聚合的功能。groupByKey只能分组,不能聚合,所以在分组聚合的场合下,推荐使用reduceByKey