什麼是廣播變量
分布式隻讀共享變量
首先廣播變量是一個調優政策(可以減少資料的傳輸,也就是資料從driver傳輸到executor)
(每一個executor都要傳list資料,如果資料太多就很慢,采用廣播變量他是一個共享隻讀變量,可以減少資料傳輸種量)
下面代碼示範的是,不使用能進行shuffle的算子,來減少網絡傳輸,用自定義邏輯實作
def main(args: Array[String]): Unit = {
val conf = new SparkConf().setAppName("Mysql").setMaster("local[*]")
//建立上下文對象
val sc = new SparkContext(conf)
val rdd1 = sc.makeRDD(List((1,2),(1,2),(2,3)))
val list = List((1,2),(2,3),(3,3))
//可以使用廣播變量(減少資料的傳輸)(每一個executor都要傳list資料,如果資料太多就很慢,采
//用廣播變量他是一個共享隻讀變量,可以減少資料傳輸種量)
//建構廣播變量
val broadcast = sc.broadcast(list)
val resultRDD = rdd1.map({
case (key,value) =>{
var v2:Any = null
//使用廣播變量
for(t <- broadcast.value){
if (key == t._2){
v2 = t._2
}
}
(key,(value,v2))
}
})
resultRDD.foreach(println)
}