操作場景
Broadcast(廣播)可以把數據集合分發到每一個節點上,Spark任務在執行過程中要使用這個數據集合時,就會在本地查找Broadcast過來的數據集合。如果不使用Broadcast,每次任務需要數據集合時,都會把數據序列化到任務里面,不但耗時,還使任務變得很大。
? ? ? ? 1、每個任務分片在執行中都需要同一份數據集合時,就可以把公共數據集Broadcast到每個節點,讓每個節點在本地都保存一份。
? ? ? ? 2、大表和小表做join操作時可以把小表Broadcast到各個節點,從而就可以把join操作轉變成普通的操作,減少了shuffle操作。
操作步驟
在開發應用程序時,添加如下代碼,將“testArr”數據廣播到各個節點。
def main(args: Array[String]) {
? ? ...
? ? val testArr: Array[Long] = new Array[Long](200)
? ? val testBroadcast: Broadcast[Array[Long]] = sc.broadcast(testArr)
? ? val resultRdd: RDD[Long] = inpputRdd.map(input => handleData(testBroadcast, input))
? ? ...
}
def handleData(broadcast: Broadcast[Array[Long]], input: String) {
? ? val value = broadcast.value
? ? ...
}