spark的廣播變數和累加器

2021-09-19 03:44:24 字數 838 閱讀 6172

廣播變數:

廣播變數允許開發人員在每個節點快取唯讀的變數,而不是在任務之間傳遞這些變數。例如,使用廣播變數能夠高效地

在集群每個節點建立大資料的副本。同時,spark還使用高效的廣播演算法分發這些變數,從而減少通訊的開銷。

spark應用程式作業的執行由一系列排程階段構成,而這些排程階段通過shuffle進行分隔。spark能夠在每個排程階段自動

廣播任務所需通用的資料,這些資料在廣播時需要進行序列化快取,並在任務執行前需進行反序列化。這就意味著當多個調

度階段的任務需要相同的資料,顯示地建立廣播變數才用。

可以通過呼叫sparkcontext.broadcast(v)建立乙個廣播變數v,該廣播變數封裝在v變數中,可使用獲取該變數value的方法進行訪問。**如下所示:

累加器:

累加器是spark中僅有通過關聯操作進行累加的變數,因此能夠有效地支援平行計算,它們能夠用於計數和求和。spark原生支援數值型別的累加器,不過開發人員能夠定義新的型別。如果在建立累加器時指定了名稱,可以通過spark的ui監控介面中進行檢視,這種方式能夠幫助理解作業所構成的排程階段執行過程。

通過呼叫sparkcontext.accumulator(v)方法初始化累加器變數v,在集群中的任務能夠使用加法或者"+="操作符進行累加操作(scala和python中)。然而,它們不能在應用程式中讀取這些值,只能由driver程式通過讀方法獲取這些累加器的值。

Spark累加器和廣播變數

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

spark之累加器和廣播變數

spark的三大資料結構 rdd 分布式資料集 廣播變數 分布式唯讀共享變數 累加器 分布式只寫共享變數 1.累加器 預設累加器 例子 對乙個list中的所有值進行相加 首先上圖中紅色部分框出來的 看上去邏輯沒有什麼大問題,但是輸出的結果sum 0。這是因為,sum在driver中被定義,在不同的e...

Spark廣播變數與累加器

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