Spark的wc过程分析

mac2022-06-30  21

有如下代码,我们需要做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不会进行预聚合

最新回复(0)