spark 廣播變數與累加器

2022-04-03 09:14:48 字數 865 閱讀 8244

如何理解廣播變數?

適用場景:大變數,比如100m以上的大集合。運算元函式中使用到外部變數時,預設情況下,spark會將該變數複製多個副本,通過網路傳輸到task中,此時每個task都有乙個變數副本。如果變數本身比較大的話(比如100m,甚至1g),那麼大量的變數副本在網路中傳輸的效能開銷,以及在各個節點的executor中占用過多記憶體導致的頻繁gc,都會極大地影響效能。

如果使用的外部變數比較大,建議使用spark的廣播功能,對該變數進行廣播。廣播後的變數,會保證每個executor的記憶體中,只駐留乙份變數副本,而executor中的task執行時共享該executor中的那份變數副本。這樣的話,可以大大減少變數副本的數量,從而減少網路傳輸的效能開銷,並減少對executor記憶體的占用開銷,降低gc的頻率。

spark.sparkcontext.setloglevel("

error")

val data=spark.sparkcontext.textfile("

f:\\ideaworkspace\\lzm\\resource\\kzc202007.txt")

val l=list("

hadoop

","apache")

val lbroad=spark.sparkcontext.broadcast(l)

data.flatmap(x=>x.trim.split("

")).map((_,1)).filter(x=>).reducebykey(_+_).collect().foreach(println(_))

通過value訪問廣播變數的值

Spark廣播變數與累加器

在dirver定義乙個變數,executor去使用,如果存在多個task,則會建立多個變數的副本,耗費記憶體。如果當前變數是乙個需要計算的值,在driver端是無法獲取的。scala實現 scala 實現 import org.apache.spark.util.doubleaccumulator ...

spark廣播變數與累加器

理論知識介紹 個人理解使用廣播變數是優化項之一 一 為什麼要使用共享變數 spark中因為運算元中的真正邏輯是傳送到executor中去執行的,所以當executor中需要引用外部變數時,需要使用廣播變數。累機器相當於統籌大變數,常用於計數,統計 二 廣播變數的原理 三 廣播變數使用方法 四 廣播變...

Spark累加器和廣播變數

累加器有些類似redis的計數器,但要比計數器強大,不僅可以用於計數,還可以用來累加求和 累加合併元素等。假設我們有乙個word.txt文字,我們想要統計該文字中單詞 sheep 的行數,我們可以直接讀取文字filter過濾然後計數。sc.textfile word.txt filter conta...