当前位置:网站首页>13 Spark on RDD 全局累加器
13 Spark on RDD 全局累加器
2022-08-08 23:31:00 【YaPengLi.】
Spark的三大核心数据结构:RDD、累加器(只写不读)、广播变量(只读不写)
在spark应用程序中,我们经常会有这样的需求,如异常监控,调试,记录符合某特性的数据的数目,这种需求都需要用到计数器,如果一个变量不被声明为一个累加器,那么它将在被改变时不会再driver端进行全局汇总,即在分布式运行时每个task运行的只是原始变量的一个副本,并不能改变原始变量的值,但是当这个变量被声明为累加器后,该变量就会有分布式计数的功能。
来个简单的例子,看为什么要使用累加器
object Acc {
def main(args: Array[String]): Unit = {
val sparConf = new SparkConf().setMaster("local").setAppName("Acc")
val sc = new SparkContext(sparConf)
val rdd = sc.makeRDD(List(1, 2, 3, 4))
var sum = 0
rdd.foreach(
num => {
sum += num
}
)
println("sum = " + sum)
sc.stop()
}
}
sum = 0
Process finished with exit code 0
累加器用来把 Executor 端变量信息聚合到 Driver 端。在 Driver 程序中定义的变量,在Executor 端的每个 Task 都会得到这个变量的一份新的副本,每个 task 更新这些副本的值后,传回 Driver 端进行 merge。
使用累加器后:
object Acc {
def main(args: Array[String]): Unit = {
val sparConf = new SparkConf().setMaster("local").setAppName("Acc")
val sc = new SparkContext(sparConf)
val rdd = sc.makeRDD(List(1, 2, 3, 4))
val sumAcc = sc.longAccumulator("sum")
rdd.foreach(
num => {
sumAcc.add(num)
}
)
println(sumAcc.value)
sc.stop()
}
}
sum = 10
Process finished with exit code 0
边栏推荐
- A preliminary study on the use of ndk and JNI
- 每日一R「01」跟着大佬学 Rust
- WeChat applet develops some function usage methods
- ndk和JNI的使用初探
- stm32 uses spi1 to read data from dma in slave mode
- Modal dialog is used to implement the sign-in
- (2022杭电多校四)1001-Link with Bracket Sequence II(区间动态规划)
- 【LaTex异常与错误】 - 公式编号的参考引用命令\eqref发生错误Undefined control sequence——可能是因为没加载宏包amsmath
- JS中的预编译(AO、GO详解)
- Qt入门(四)——连续播放图片(两种定时器的运用)
猜你喜欢
随机推荐
51nod2861 2-sat
(2022牛客多校五)H-Cutting Papers(签到)
Tp5 in cache cache, storage cell phone text message authentication code
tp5用cache缓存,存储手机短信验证码
[Tensorflow2] Some interface changes of tensorflow1.x-tensorflow2.x
ABP中的数据过滤器
最小生成树prim 求得 树上两点之间的最大最小值
每日一R「01」跟着大佬学 Rust
Introduction to Qt (4) - Continuous playback of pictures (the use of two timers)
考证必看 | PMP扫盲贴+PMP材料
51nod2614 小B爱旅行 (参考范艺杰代码 基本抄袭 太难了)
php 将时间戳转化为 刚刚、几分钟前、几小时前、几天前 格式
STM8L LCD digital tube driver, thermometer LCD display
详解JS中for...of、in关键字
树莓派wiringPi库的使用补充
stm32 uses serial port to receive idle interrupt + dma to achieve variable length dma reception
(2022牛客多校五)B-Watches(二分)
2022杭电多校五 C - Slipper (dijkstra+虚拟结点)
启牛商学院靠不靠谱呢?证券账户开了安全吗
WeChat applet wx:for loop output example