美文网首页
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