天天看點

Spark-三大資料結構之-廣播變量

什麼是廣播變量

分布式隻讀共享變量

首先廣播變量是一個調優政策(可以減少資料的傳輸,也就是資料從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)

  }
           

繼續閱讀