Spark Core(七)共享变量、广播变量、累加器

本文介绍了Spark中广播变量和累加器的概念及其应用场景。广播变量用于减少网络开销,将只读变量高效地发送到Worker节点。累加器则用于在集群环境中进行计数或求和操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. 共享变量
    1. 定义: Spark是集群部署的,当我们Spark执行程序需要依赖于一个单独的成员变量,那么spark就会把这个变量发送到worker节点上的每个Executor下的所有对应的task中,如果共享变量很大,那么就会对网络开销比较大,影响作业的执行效率,所以就引入了广播变量和累加器的概念。
  2. 广播变量

    1. 定义:广播变量允许程序将只读的变量发送到每台Worker节点上,而不是发送到每个Task上。例如它可以高效的向每个节点输入一个大型的数据集的副本集。Spark尝试通过高效的广播算法来减少网络开销。
    2. 用法

      val conf = new SparkConf().setAppName("").setMaster("local")
      val sc = new SparkContext(conf)
      val factor = 3
      //创建广播变量
      val factorBroadcast: Broadcast[Int] = sc.broadcast(factor)
      val rdd: RDD[Int] = sc.parallelize(Array(1,2,3,4,5)).map(_+factorBroadcast.value)
      rdd.foreach(println(_))
  3. 累加器

    1. 定义:累加器只不过是一种别相关操作累加计数的一种变量,它被用来计数器或者总和。累加器对变量v调用sc.accumulator(v)来创建,在集群上可以使用add或者“+=”来实现累加功能。注意的是累加器的值只有Driver程序能够读取他的值
    2. 用法

      //创建累加器
      val accum = sc.longAccumulator("My Accumulator")
      //使用累加器
      sc.parallelize(Array(1, 2, 3, 4)).foreach(x => accum.add(x))
      //获取累加器的结果
      accum.value
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值