Spark的wc過程分析

有如下代碼,我們需要做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不會進行預聚合

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章