小言_互联网的博客

Spark的wc过程分析

325人阅读  评论(0)

有如下代码,我们需要做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的源码,里面的mapSideCombinefalse

所以reduceByKey和groupByKey的区别就是:reduceByKey会进行预聚合,而groupByKey不会进行预聚合


转载:https://blog.csdn.net/u010452388/article/details/101940586
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场