Spark学习之路【SparkCore入门解析 ③累加器和广播变量】

累加器

累加器是在Spark计算操作中变量值累加起来,可以被用来实现计数器、或者求和操作。Spark原生地只支持数字类型的累加器,编程者可以添加新类型的支持。如果创建累加器时指定了名字,可就以在SparkUI界面看到。这有利于理解每个执行阶段的进程。综合一句话来说,累加器在Driver端定义赋初始值,累加器只能在Driver端读取,在 Excutor 端更新

我们大致看下图大致了解一下累加器:
在这里插入图片描述

广播变量

广播变量是将变量复制到每一台机器上而不是普通变量那样复制到每个task上,从图二可以看出变量先是从远程的driver上复制到一台机器上,然后这台机器的task就从这台机器上获取变量,不需要再从远程节点上获取,减少了IO,加快了速率。广播变量只能读取,并不能修改。经典应用是大表与小表的join中通过广播变量小表来实现以brodcast join 取代reduce join
广播是driver进行的操作,必须是有结果的变量,故不可能直接广播RDD,常常的是将通过collectAsMap算子将需要广播的RDD转换成Map集合然后广播出去
变量一旦被定义为一个广播变量,那么这个变量只能读,不能修改

我们大致看下图大致了解一下广播变量:
在这里插入图片描述
使用广播变量的注意事项:
1.能不能将一个 RDD 使用广播变量广播出去?不能,因为RDD是不存储数据的。可以将RDD的结果广播出去
2. 广播变量只能在 Driver 端定义,不能在 Executor 端定义
3. 在 Driver 端可以修改广播变量的值,在 Executor 端无法修改广播变量的值
4.广播变量允许程序员将一个只读的变量缓存在每台机器上,而不用在任务之间传递变量
5.广播变量可被用于有效地给每个节点一个大输入数据集的副本
6.Spark还尝试使用高效地广播算法来分发变量,进而减少通信的开销

一、RDD概念

二、RDD编程

发布了66 篇原创文章 · 获赞 295 · 访问量 18万+

猜你喜欢

转载自blog.csdn.net/qq_43733123/article/details/104732501