spark(四)廣播變數

2021-10-04 18:29:51 字數 676 閱讀 2272

​ 廣播變數,初始的時候,就在drvier上有乙份副本。 task在執行的時候,想要使用廣播變數中的資料,此時首先會在自己本地的executor對應的blockmanager中,嘗試獲取變數副本;如果本地沒有,那麼就從driver遠端拉取變數副本,並儲存在本地的blockmanager中;此後這個executor上的task,都會直接使用本地的blockmanager中的副本。 executor的blockmanager除了從driver上拉取,也可能從其他節點的blockmanager上拉取變數副本,距離越近越好。

val rdd23: rdd[int]

= sc.

makerdd

(1 to 9

) var broad: string =

"test"

//廣播變數,如果是從hdfs讀取需要將executor的資料collect到driver端合併,再廣播到executor

val broadcastref: broadcast[string]

= sc.

broadcast

(broad)

val rdd24: rdd[int]

= rdd23.

map(d =

>

) rdd24.

collect

()

Spark的廣播變數

將每個task都要計算的資料設定成廣播變數,如果不設定成廣播變數,則每個 task 都會儲存乙份這樣一模一樣的資料,這樣就占用了很多的儲存空間,將共享變數設定成廣播變數後只在乙個 excuter 裡面儲存這樣乙份 共享資料,這個 excuter 裡面的task 計算的時候共享這樣乙份資料,這樣就減少...

Spark廣播變數Broadcast

spark廣播變數的目的是讓每個worker節點在記憶體中儲存乙個唯讀的物件,節省了在每次tasks建立傳送到woker節點中攜帶該物件副本的網路io。一些需要在多個task中使用的,不可變的大資料集合物件尤其適合被定義程廣播變數。廣播變數的定義方法,fron spark官網 val broadca...

Spark之廣播變數

廣播變數 1.客戶端的 driver 中有乙個 list 如果 executor task要用到這個 list 這時候 在driver 建立乙個 list廣播變數 這樣會在 executor 啟動乙個 blockmanager 來管理 driver廣播的 變數 在driver一廣播變數 execut...