spark中的shared variables

本文介绍了Apache Spark中的两种共享变量:broadcast variables与accumulators。broadcast variables用于分发只读数据到各个计算节点,提高效率;accumulators则用于实现全局计数等操作,确保在action操作中的准确性。

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

        Spark中涉及到共享变量的话,有两种办法:

         一.

        broadcast variables 只读变量,创建后将向所有的executor节点进行分发。各个executor计算是,可以取出这个变量,来参与计算。相比直接将需要的文件拷贝到各个节点,更加高效。spark在计算的每个stage将会自动广播公共数据到计算节点。

        

scala> val broadcastVar = sc.broadcast(Array(1, 2, 3))
broadcastVar: org.apache.spark.broadcast.Broadcast[Array[Int]] = Broadcast(0)

scala> broadcastVar.value
res0: Array[Int] = Array(1, 2, 3)

         二.

         accumulators  类似于MapReduce中Counter,可以用来做全局记数。accumulators保证在每个action操作中,不会由于task任务失败重新计算而导致值不准确。但是在transfomation中,并不提供这个保证。

         

scala> val accum = sc.accumulator(0, "My Accumulator")
accum: spark.Accumulator[Int] = 0

scala> sc.parallelize(Array(1, 2, 3, 4)).foreach(x => accum += x)
...
10/09/29 18:41:08 INFO SparkContext: Tasks finished in 0.317106 s

scala> accum.value
res2: Int = 10
          当然,spark也支持自己定义accumulators.

   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值