Spark三大核心資料結構(三) 廣播變數

2021-09-11 04:15:45 字數 1521 閱讀 8870

spark的三大核心資料結構:rdd、累加器(只寫不讀)、廣播變數(唯讀不寫)

廣播變數用來高效分發較大的物件。向所有工作節點傳送乙個較大的唯讀值,以供乙個或多個spark操作使用。

不用廣播變數的話,轉換運算元和執行運算元之間會有shuffle的過程;

使用廣播變數的好處是避免了rdd轉換和行動中的shuffle的落盤和磁碟io,提高效能,是spark的一種優化手段。

廣播變數原理是將rdd封裝成廣播變數,存放在記憶體中;其餘的rdd與這個rdd資料進行互動的時候,就是在記憶體中相互動,只做map操作,效率得到很大的提高。

scala> val rdd1 = sc.makerdd(array((1,"a"),(2,"b")))

rdd1: org.apache.spark.rdd.rdd[(int, string)] = parallelcollectionrdd[2] at makerdd at :24

scala> val rdd2 = sc.makerdd(array((1,"a"),(2,"bb"),(3,"cc")))

rdd2: org.apache.spark.rdd.rdd[(int, string)] = parallelcollectionrdd[3] at makerdd at :24

scala> rdd1.join(rdd2).collect

res1: array[(int, (string, string))] = array((1,(a,a)), (2,(b,bb)))

用時如下0.5s:

sc.broadcast建立廣播變數,變數.value獲取廣播變數的值

但是由於廣播變數是傳入每個worker工作節點中,所以廣播變數記憶體不宜過大,否則會造成worker節點的executor記憶體不足

scala> val rdd2 = sc.makerdd(array((1,"a"),(2,"bb"),(3,"cc")))

rdd2: org.apache.spark.rdd.rdd[(int, string)] = parallelcollectionrdd[3] at makerdd at :24

scala> val bc = sc.broadcast(array((1,"a"),(2,"bb")))

bc: org.apache.spark.broadcast.broadcast[array[(int, string)]] = broadcast(3)

scala> rdd2.map(item=>).collect

res2: array[(int, string)] = array((1,a), (2,bb), (3,cc))

用時44ms:

相比不使用廣播變數,效能得到了很大的提高。

核心資料結構

關於開發驅動重要的核心資料結構,方便自己理解 driver object typedef struct driver object cshort type cshort size 乙個鍊錶,記錄了該驅動建立的所有裝置物件 pdevice object deiceobject ulong flags ...

核心資料結構

核心需要儲存i o元件使用的狀態資訊,可以通過若干核心資料結構比如說檔案開啟表等來完成 unix系統中在讀取乙個使用者檔案的時候,核心需要去檢查下快取,然後再去決定是否執行磁碟i o,在讀乙個程序映象時候,核心只需要從記憶體當中讀取資料,也就是說這些操作都可以呼叫read 函式來完成,但是語義不同 ...

核心資料結構

這部分包含了修改核心模組,所以要使用到核心鏈結表資料結構。首先你得定義乙個包含元素的結構去插入鍊錶。下邊這段 用c語言定義了生日結構 struct birthday 注意struct list head list。結構list head在包含目錄的裡有定義。它的作用就是嵌入包含列表節點的鏈結表。li...