有如下代码,我们需要做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
不会进行预聚合
转载:https://blog.csdn.net/u010452388/article/details/101940586
查看评论