13.Spark Core-Spark中廣播變量和累加器

一栽惶、前述

Spark中因為算子中的真正邏輯是發(fā)送到Executor中去運行的,所以當Executor中需要引用外部變量時疾嗅,需要使用廣播變量外厂。

累機器相當于統(tǒng)籌大變量,常用于計數(shù)代承,統(tǒng)計汁蝶。

二、具體原理

1论悴、廣播變量

  • 廣播變量理解圖
image
  • 注意事項

1掖棉、能不能將一個RDD使用廣播變量廣播出去?

不能膀估,因為RDD是不存儲數(shù)據(jù)的幔亥。可以將RDD的結果廣播出去。

2察纯、 廣播變量只能在Driver端定義帕棉,不能在Executor端定義针肥。

3、 在Driver端可以修改廣播變量的值香伴,在Executor端無法修改廣播變量的值祖驱。

4、如果executor端用到了Driver的變量瞒窒,如果不使用廣播變量在Executor有多少task就有多少Driver端的變量副本捺僻。

5、如果Executor端用到了Driver的變量崇裁,如果使用廣播變量在每個Executor中只有一份Driver端的變量副本匕坯。

val conf = new SparkConf()
conf.setMaster("local").setAppName("brocast")
val sc = new SparkContext(conf)
   val list = List("hello","world")
    val broadCast = sc.broadcast(list)
    val lineRDD = sc.textFile("input/*")
    lineRDD.filter { x => {println(broadCast.value);broadCast.value.contains(x)} }.collect().foreach { println}
    sc.stop()

2、累加器

  • 累加器理解圖
image
image

Scala代碼:
有問題

object acculateDemo {

  def main(args: Array[String]): Unit = {
    val conf = new SparkConf().setMaster("local").setAppName("sortDemo")
    val sc = new SparkContext(conf)

    var accumulator = 0
    sc.textFile("input/*",2).foreach {//兩個變量
      x =>{accumulator += x.toInt
        println(accumulator)}}
    println(accumulator)
    sc.stop()

  }

}

正確

import org.apache.spark.{SparkConf, SparkContext}

object AccumulatorOperator {
  def main(args: Array[String]): Unit = {
    val conf = new SparkConf()
    conf.setMaster("local").setAppName("accumulator")
    val sc = new SparkContext(conf)
    val accumulator = sc.longAccumulator
    sc.textFile("./records.txt",2).foreach {//兩個變量
      x =>{accumulator.add(1)
      println(accumulator)}}
    println(accumulator.value)
    sc.stop()
  }
}

結果:

image
package com.neusoft

import org.apache.spark.{SparkConf, SparkContext}

/**
  * Created by ttc on 2018/10/17.
  */

object acculateDemo {

  def main(args: Array[String]): Unit = {
    val conf = new SparkConf().setMaster("local")
    val sc = new SparkContext(conf)

    val rdd = sc.textFile("/root/words.txt",10)
    val sum = sc.collectionAccumulator[String]

    rdd.map(x=>{
      sum.add(x)
    }).collect()

    println("sum is " + sum.value)
    sc.stop()

  }
}

注意事項

累加器在Driver端定義賦初始值拔稳,累加器只能在Driver端讀取最后的值葛峻,在Excutor端更新。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末巴比,一起剝皮案震驚了整個濱河市术奖,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌轻绞,老刑警劉巖采记,帶你破解...
    沈念sama閱讀 218,451評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異政勃,居然都是意外死亡唧龄,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評論 3 394
  • 文/潘曉璐 我一進店門奸远,熙熙樓的掌柜王于貴愁眉苦臉地迎上來既棺,“玉大人,你說我怎么就攤上這事懒叛⊥杳幔” “怎么了?”我有些...
    開封第一講書人閱讀 164,782評論 0 354
  • 文/不壞的土叔 我叫張陵薛窥,是天一觀的道長胖烛。 經(jīng)常有香客問我,道長拆檬,這世上最難降的妖魔是什么洪己? 我笑而不...
    開封第一講書人閱讀 58,709評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮竟贯,結果婚禮上答捕,老公的妹妹穿的比我還像新娘。我一直安慰自己屑那,他們只是感情好拱镐,可當我...
    茶點故事閱讀 67,733評論 6 392
  • 文/花漫 我一把揭開白布艘款。 她就那樣靜靜地躺著,像睡著了一般沃琅。 火紅的嫁衣襯著肌膚如雪哗咆。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,578評論 1 305
  • 那天益眉,我揣著相機與錄音晌柬,去河邊找鬼。 笑死郭脂,一個胖子當著我的面吹牛年碘,可吹牛的內容都是我干的。 我是一名探鬼主播展鸡,決...
    沈念sama閱讀 40,320評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼屿衅,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了莹弊?” 一聲冷哼從身側響起涤久,我...
    開封第一講書人閱讀 39,241評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎忍弛,沒想到半個月后响迂,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,686評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡剧罩,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,878評論 3 336
  • 正文 我和宋清朗相戀三年栓拜,在試婚紗的時候發(fā)現(xiàn)自己被綠了座泳。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片惠昔。...
    茶點故事閱讀 39,992評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖挑势,靈堂內的尸體忽然破棺而出镇防,到底是詐尸還是另有隱情,我是刑警寧澤潮饱,帶...
    沈念sama閱讀 35,715評論 5 346
  • 正文 年R本政府宣布来氧,位于F島的核電站,受9級特大地震影響香拉,放射性物質發(fā)生泄漏啦扬。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,336評論 3 330
  • 文/蒙蒙 一凫碌、第九天 我趴在偏房一處隱蔽的房頂上張望扑毡。 院中可真熱鬧,春花似錦盛险、人聲如沸瞄摊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽换帜。三九已至楔壤,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間惯驼,已是汗流浹背蹲嚣。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留祟牲,地道東北人端铛。 一個月前我還...
    沈念sama閱讀 48,173評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像疲眷,于是被迫代替她去往敵國和親禾蚕。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,947評論 2 355

推薦閱讀更多精彩內容