spark廣播變數與累加器

2022-06-27 04:09:11 字數 739 閱讀 4967

理論知識介紹:(個人理解使用廣播變數是優化項之一)

一、為什麼要使用共享變數

spark中因為運算元中的真正邏輯是傳送到executor中去執行的,所以當executor中需要引用外部變數時,需要使用廣播變數。

累機器相當於統籌大變數,常用於計數,統計

二、廣播變數的原理

三、廣播變數使用方法

四、廣播變數注意事項

1、能不能將乙個rdd使用廣播變數廣播出去?

不能,因為rdd是不儲存資料的。可以將rdd的結果廣播出去。

2、 廣播變數只能在driver端定義,不能在executor端定義。

3、 在driver端可以修改廣播變數的值,在executor端無法修改廣播變數的值。

4、如果executor端用到了driver的變數,如果不使用廣播變數在executor有多少task就有多少driver端的變數副本。

5、如果executor端用到了driver的變數,如果使用廣播變數在每個executor中只有乙份driver端的變數副本。

累加器相關:

spark2.x之後,之前的的accumulator被廢除,用accumulatorv2代替;
val longaccumulator = new longaccumulator

sc.register(longaccumulator)

累加器在driver端定義賦初始值,累加器只能在driver端讀取,在excutor端更新

Spark廣播變數與累加器

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

spark 廣播變數與累加器

如何理解廣播變數?適用場景 大變數,比如100m以上的大集合。運算元函式中使用到外部變數時,預設情況下,spark會將該變數複製多個副本,通過網路傳輸到task中,此時每個task都有乙個變數副本。如果變數本身比較大的話 比如100m,甚至1g 那麼大量的變數副本在網路中傳輸的效能開銷,以及在各個節...

Spark累加器和廣播變數

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