Spark广播变量的作用和使用

本文介绍了Apache Spark中的广播变量概念及其作用,它用于优化Executor端访问Driver端变量的效率,避免大量数据复制导致的内存占用。示例展示了如何使用广播变量实现类似join操作,提高并行计算性能。
摘要由CSDN通过智能技术生成

广播变量的作用

  • 广播变量:分布式只读变量。
  • 如果Executor端需要访问Driver端的某个变量,spark会向Executor端每个task都发送一个此变量的副本。如果此变量很大,就会占用大量的Executor节点的内存。
  • 利用广播变量,spark只会给一个Executor节点发送一个变量。

广播变量的使用

需求

        一个List和一个RDD实现类似join算子的效果。

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()
  }
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值