有如下代码,我们需要做wc统计
def
main(args
: Array
[String
]): Unit
= {
val sparkConf
= new SparkConf().setMaster("local[2]").setAppName("my-test")
val sc
= new SparkContext(sparkConf
)
val list
= sc
.parallelize(List("java,python,scala", "java,python,scala", "java,python,scala"),3)
val words
= list
.flatMap(_
.split(","))
val pair
= words
.map(x
=>(x
,1))
val result
= pair
.reduceByKey(_
+_
)
sc
.stop()
}
执行流程如下: 在reduceByKey的时候,先会对数据进行预聚合,我们从源码可以看到,reduceByKey最终走的方法是combineByKeyWithClassTag,里面的mapSideCombine默认为true
这里可能会出现一个面试题:reduceByKey和groupByKey的区别? 我们看下groupByKey的源码,里面的mapSideCombine为false
所以reduceByKey和groupByKey的区别就是:reduceByKey会进行预聚合,而groupByKey不会进行预聚合