Spark 브로드 캐스트 변수의 역할 및 사용

방송 변수의 역할

  • 브로드 캐스트 변수 : 분산 읽기 전용 변수입니다.
  • Executor 측이 Driver 측의 변수에 액세스해야하는 경우 Spark는이 변수의 사본을 Executor 측의 각 작업에 보냅니다. 이 변수가 크면 Executor 노드의 메모리를 많이 차지합니다.
  • 브로드 캐스트 변수를 사용하면 Spark는 하나의 Executor 노드에 하나의 변수 만 보냅니다.

방송 변수 사용

수요

        List 및 RDD는 조인 연산자와 유사한 효과를 얻습니다.

object Spark08_Broadcast {
    
    
  def main(args: Array[String]): Unit = {
    
    
    val conf: SparkConf = new SparkConf().setAppName(this.getClass.getName).setMaster("local[*]")
    val sc = new SparkContext(conf)
    val list1: List[(String, Int)] = List(("a",1),("b",2),("c",2))
    val list2: RDD[(String, Int)] = sc.makeRDD(List(("a",3),("b",4),("c",5)))

    // 启用广播变量
    val broadList: Broadcast[List[(String, Int)]] = sc.broadcast(list1)

    // join两个数据,结构(key,(value1,value2))
    val resRDD: RDD[(String, (Int, Int))] = list2.map {
    
    
      case (word, count) => {
    
    
        // 定义临时变量,保存相同key对应的value
        var v3 = 0
        // 获取广播变量中的值
        val broadValue: List[(String, Int)] = broadList.value
        for (w <- broadValue) {
    
    
          if (w._1 == word) {
    
    
            v3 = w._2
          }
        }
        (word, (count, v3))
      }
    }
    resRDD.foreach(println)

    sc.stop()
  }
}

추천

출처blog.csdn.net/FlatTiger/article/details/115134300