Spark Core 性能調(diào)優(yōu)之使用廣播變量

操作場景

Broadcast(廣播)可以把數(shù)據(jù)集合分發(fā)到每一個節(jié)點上,Spark任務(wù)在執(zhí)行過程中要使用這個數(shù)據(jù)集合時,就會在本地查找Broadcast過來的數(shù)據(jù)集合。如果不使用Broadcast,每次任務(wù)需要數(shù)據(jù)集合時,都會把數(shù)據(jù)序列化到任務(wù)里面,不但耗時,還使任務(wù)變得很大。

? ? ? ? 1、每個任務(wù)分片在執(zhí)行中都需要同一份數(shù)據(jù)集合時,就可以把公共數(shù)據(jù)集Broadcast到每個節(jié)點,讓每個節(jié)點在本地都保存一份。

? ? ? ? 2、大表和小表做join操作時可以把小表Broadcast到各個節(jié)點,從而就可以把join操作轉(zhuǎn)變成普通的操作,減少了shuffle操作。

操作步驟

在開發(fā)應(yīng)用程序時,添加如下代碼,將“testArr”數(shù)據(jù)廣播到各個節(jié)點。

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

? ? ...

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容