Spark方法aggregate講解

首先看一下Spark官網(wǎng)對(duì)該方法的講解:
aggregate(RDD.scala)

大致的意思是aggregate接收兩個(gè)函數(shù)辟宗,和一個(gè)初始化值赊豌。seqOp函數(shù)用于聚集每一個(gè)分區(qū),combOp用于聚集所有分區(qū)聚集后的結(jié)果瓤湘。每一個(gè)分區(qū)的聚集瓢颅,和最后所有分區(qū)的聚集都需要初始化值的參與。
舉例如下:

集群環(huán)境:一臺(tái)Master弛说,三臺(tái)Worker,在spark-shell中測(cè)試

scala> val  seqOp:(Int,Int)=>Int={(a,b)=>{println("seqOp"+a+"\t"+b);math.min(a,b)}}
seqOp: (Int, Int) => Int = <function2>

scala> val combOp:(Int,Int)=>Int={(a,b)=>{println("combOp"+a+"\t"+b);a+b}}
combOp: (Int, Int) => Int = <function2>

scala> val z=sc.parallelize(List(1,2,3,4,5,6,7,8),2)
z: org.apache.spark.rdd.RDD[Int] = ParallelCollectionRDD[5] at parallelize at <console>:24

scala> z.aggregate(3)(seqOp,combOp)
[Stage 13:>                                        (0 + 0) / 2]combOp3 1
combOp 4 3
res13: Int = 7                                                                  

為什么會(huì)等于7呢挽懦?

我們首先看一下集群中任務(wù):
任務(wù)

可以看出有兩個(gè)任務(wù),原因是我們將List并發(fā)數(shù)設(shè)置為了2木人,Spark會(huì)將List拆分成2部分同時(shí)執(zhí)行信柿。再進(jìn)一步看這兩個(gè)任務(wù)的的統(tǒng)計(jì)信息:
任務(wù)的統(tǒng)計(jì)信息

可以看出這兩個(gè)任務(wù)在兩個(gè)worker上執(zhí)行,可以看到任務(wù)的啟動(dòng)時(shí)間醒第,執(zhí)行了多久等信息渔嚷。再進(jìn)一步看任務(wù)的stdout輸出日志:


任務(wù)一的輸出日志

任務(wù)二的輸出日志

可以看出spark將List拆分成了兩部分,啟動(dòng)兩個(gè)任務(wù)分別執(zhí)行稠曼。再來(lái)看看seqOp函數(shù)表達(dá)的意思形病,seqOp取的是兩個(gè)數(shù)中的較小值。如第一半部分List(1,2,3,4),spark會(huì)拿初始值3與這個(gè)List中的每一個(gè)元素分別比較蒲列,最后得出的結(jié)果是1.同時(shí),第二半部分List得出的結(jié)果是3,然后spark再將這兩部分得出的結(jié)果調(diào)用combOp處理搀罢,combOp是兩個(gè)數(shù)的相加蝗岖,spark首先將初始值3加上1得出4,再加上3得到7.

接下來(lái)再看一下使用aggregate方法編寫(xiě)wordcount例子榔至。

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}
import scala.collection.mutable

/**
  * User:cool coding
  * Date:20171214
  * Time:16:12:20
  *
  */
object WordCount {
  def main(args: Array[String]): Unit = {
    val conf=new SparkConf().setAppName("wordcount").setMaster("local[2]")
    val sc=new SparkContext(conf)
    val data=sc.textFile("H:/hadoop/wordcount.txt");
    val words: RDD[String] = data.flatMap(_.split(" "))
    val countsMap=words.aggregate(mutable.HashMap[String,Int]())((agg:mutable.HashMap[String,Int], word)=>{
      if(!agg.contains(word)){
        agg.put(word,1)
      }else{
        agg.put(word,agg(word)+1)
      }
      agg
      },(agg1:mutable.HashMap[String,Int],agg2:mutable.HashMap[String,Int])=> {
         for((word,count)<-agg1){
           if(!agg2.contains(word)){
             agg2.put(word,1)
           }else{
             agg2.put(word,agg2(word)+count)
           }
         }
      agg2
    }
    )
    println(countsMap.toList)
  }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末抵赢,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌铅鲤,老刑警劉巖划提,帶你破解...
    沈念sama閱讀 222,183評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異邢享,居然都是意外死亡鹏往,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)骇塘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)伊履,“玉大人,你說(shuō)我怎么就攤上這事款违√破伲” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,766評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵插爹,是天一觀的道長(zhǎng)哄辣。 經(jīng)常有香客問(wèn)我,道長(zhǎng)赠尾,這世上最難降的妖魔是什么力穗? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,854評(píng)論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮萍虽,結(jié)果婚禮上睛廊,老公的妹妹穿的比我還像新娘。我一直安慰自己杉编,他們只是感情好超全,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,871評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著邓馒,像睡著了一般嘶朱。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上光酣,一...
    開(kāi)封第一講書(shū)人閱讀 52,457評(píng)論 1 311
  • 那天疏遏,我揣著相機(jī)與錄音,去河邊找鬼救军。 笑死财异,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的唱遭。 我是一名探鬼主播戳寸,決...
    沈念sama閱讀 40,999評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼拷泽!你這毒婦竟也來(lái)了疫鹊?” 一聲冷哼從身側(cè)響起袖瞻,我...
    開(kāi)封第一講書(shū)人閱讀 39,914評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎拆吆,沒(méi)想到半個(gè)月后聋迎,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,465評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡枣耀,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,543評(píng)論 3 342
  • 正文 我和宋清朗相戀三年霉晕,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片奕枢。...
    茶點(diǎn)故事閱讀 40,675評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡娄昆,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出缝彬,到底是詐尸還是另有隱情萌焰,我是刑警寧澤,帶...
    沈念sama閱讀 36,354評(píng)論 5 351
  • 正文 年R本政府宣布谷浅,位于F島的核電站扒俯,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏一疯。R本人自食惡果不足惜撼玄,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,029評(píng)論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望墩邀。 院中可真熱鬧掌猛,春花似錦、人聲如沸眉睹。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,514評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)竹海。三九已至慕蔚,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間斋配,已是汗流浹背孔飒。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,616評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留艰争,地道東北人坏瞄。 一個(gè)月前我還...
    沈念sama閱讀 49,091評(píng)論 3 378
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像甩卓,于是被迫代替她去往敵國(guó)和親鸠匀。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,685評(píng)論 2 360

推薦閱讀更多精彩內(nèi)容