美文网首页
Spark广播

Spark广播

作者: wudl | 来源:发表于2021-06-17 18:09 被阅读0次

    1.Spark 的广播传播

    1.1实现原理

    1.广播变量用来高效分发较大的对象。向所有工作节点发送一个较大的只读值,以供一个或多个Spark操作使用。
    2.比如,如果你的应用需要向所有节点发送一个较大的只读查询表,广播变量用起来都很顺手。
    3.在多个并行操作中使用同一个变量,但是 Spark会为每个任务分别发送
    
    package com.wudl.core
    
    import org.apache.spark.broadcast.Broadcast
    import org.apache.spark.{SparkConf, SparkContext}
    
    import scala.collection.mutable
    
    /**
     *
     * @author wudl
     * @create 2021/6/17 17:51
     * @description
     */
    object BroadcastRDD {
      def main(args: Array[String]): Unit = {
        val sparkConf = new SparkConf().setMaster("local[1]").setAppName("BroadcaseRdd")
        val sc = new SparkContext(sparkConf)
        val dataRdd = sc.makeRDD(List(("a", 1), ("b", 2), ("c", 3), ("d", 4)), 4)
        val list = List(("a", 4), ("b", 5), ("c", 6), ("d", 7))
        // 声明广播变量
        val broadcast: Broadcast[List[(String, Int)]] = sc.broadcast(list)
        val result = dataRdd.map {
          case (key, num) => {
            var numb2 = 0
            // 使用广播变量
            for ((k, v) <- broadcast.value) {
              if (k == key) {
                numb2 = v
              }
            }
            (key, (num, numb2))
          }
        }
        result.foreach(println)
        sc.stop()
      }
    }
    
    

    相关文章

      网友评论

          本文标题:Spark广播

          本文链接:https://www.haomeiwen.com/subject/rpncyltx.html