Spark一路火花带闪电——Accumulator Broadcast
文章目录
- Accumulator累加器
- Accumulator简介
- 陷阱及解决办法
- Broadcast广播变量
Accumulator累加器
Accumulator简介
Accumulator是spark提供的累加器。在Spark中如果想在Task计算的时候统计某些事件的数量,使用filter/reduce也可以,但是使用累加器是一种更方便的方式,累加器一个比较经典的应用场景是用来在Spark Streaming应用中记录某些事件的数量。
陷阱及解决办法
val num=sc.longAccumulator("name")val new_rdd2=rdd2.map(x=>{num.add(1)x+1})new_rdd2.count()new_rdd2.foreach(x=>print(x+" "))println(" "+num)
这样输出的num值为20,而不是10。spark中的一系列transform操作会构成一串长的任务链,此时需要通过一个action操作来触发,accumulator也是一样。因此在一个action操作之前,你调用value方法查看其数值,肯定是没有任何变化的。
所以在第一次count(action操作)之后,我们发现累加器的数值变成了10,是我们要的答案。
之后又对新产生的的new_rdd2进行了一次foreach(action操作),其实这个时候又执行了一次map(transform)操作,所以累加器又增加了10。最终获得的结果变成20。
解决办法
看了上面的分析,大家都有这种印象了,那就是使用累加器的过程中只能使用一次action的操作才能保证结果的准确性。
事实上,还是有解决方案的,只要将任务之间的依赖关系切断就可以了。什么方法有这种功能呢?你们肯定都想到了,cache,persist。调用这个方法的时候会将之前的依赖切除,后续的累加器就不会再被之前的transfrom操作影响到了。
new_rdd2.cache().count()
Broadcast广播变量
广播变量(broadcast varible)为只读变量,它有运行SparkContext的驱动程序创建后发送给参与计算的节点。对那些需要让工作节点高效地访问相同数据的应用场景,比如机器学习。我们可以在SparkContext上调用broadcast方法创建广播变量: 广播变量也可以被非驱动程序所在节点(即工作节点)访问,访问方法就是调用该变量的value方法,使用广播变量可以优化资源提高性能。
广播变量的优势:是因为不是每个task一份变量副本,而是变成每个节点的executor才一份副本。这样的话,就可以让变量产生的副本大大减少。 广播变量,初始的时候,就在Drvier上有一份副本。task在运行的时候,想要使用广播变量中的数据,此时首先会在自己本地的Executor对应的BlockManager中,尝试获取变量副本;如果本地没有,BlockManager,也许会从远程的Driver上面去获取变量副本;也有可能从距离比较近的其他节点的Executor的BlockManager上去获取,并保存在本地的BlockManager中;BlockManager负责管理某个Executor对应的内存和磁盘上的数据,此后这个executor上的task,都会直接使用本地的BlockManager中的副本。
rdd1=sc.parallelize([1,2,3,4,5])num=3broadcastFactor=sc.broadcast(num)rdd2=rdd1.map(lambda x:x*broadcastFactor.value)rdd2.foreach(lambda x:print(x))
Spark一路火花带闪电——Accumulator Broadcast相关推荐
- Spark一路火花带闪电——认识Spark
文章目录 认识Apache Spark 1.1 Spark是一个软件栈 1.1.1 Spark Core 1.1.2 Spark SQL 1.1.3 Spark Streaming 1.1.4 MLl ...
- Spark一路火花带闪电——Spark底层原理介绍
文章目录 Spark计算引擎原理 1.1 术语 1.1.1 Application:Spark应用程序 1.1.2 Driver:驱动程序 1.1.3 Cluster Manager:资源管理器 1. ...
- Spark一路火花带闪电——Spark踩坑记
文章目录 坑有哪些? 踩坑记:版本号一定要正确!!!JDK一定要匹配. 使用idea打包maven项目 坑有哪些? ClassNotFoundException:表明maven依赖和服务器中的版本不匹 ...
- Spark一路火花带闪电——Spark常用算子(参数及其返回值)探究
文章目录 转化算子 行动算子 转化算子 以数据Seq(1,2,3,3)为例子 map(f:T => U):RDD[U] 映射:将函数应用于RDD内的每个元素,将其返回值构成新的RDD rdd.m ...
- Spark一路火花带闪电——Pair RDD常用算子(参数及其返回值)探究
文章目录 转化算子 行动算子 转化算子 以键值对集合{(1,2),(3,4),(3,6)}为例 RDD[U,T]注意下面的函数,对应U和T reduceByKey(f:(T,T) => T):R ...
- 手拿菜刀砍电线,一路火花带闪电,神经病人思维广,弱智孩子欢乐多!
150条经典装逼语录,签名专用 ~~~手拿菜刀砍电线,一路火花带闪电~~~(转) 2009年07月26日 星期日 12:10 1.<卖火柴的小女孩>这篇文章主要写得是:一个小女孩五次擦火柴 ...
- 程序猿菜鸟打怪升级—一路火花带闪电
文章目录 一. 昨夜西风凋碧树,独上高楼,望尽天涯路 二. 衣带渐宽终不悔,为伊消得人憔悴 三.众里寻他千百度,蓦然回首,那人却在,灯火阑珊处 [告别平庸的9个方法] 各位小伙伴,大家好!我是猿人谷, ...
- Spark(火花)快速、通用的大数据处理引擎框架
一.什么是Spark(火花)? 是一种快速.通用处理大数据分析的框架引擎. 二.Spark的四大特性 1.快速: Spark内存上采用DAG(有向无环图)执行引擎非循环数据流和内存计算支持. 内存上比 ...
- 阿里内部的那个牛逼带闪电的Java诊断工具arthas终于开源了
在阿里巴巴内部,有很多自研工具供开发者使用,其中有一款工具,是几乎每个Java开发都使用过的工具,那就是Arthas,这是一款Java诊断工具,是一款牛逼带闪电的工具.该工具已于2018年9月份开源. ...
最新文章
- Hadoop技术之Hadoop HA 机制学习
- [css] 如何使用css实现跨浏览器的最小高度?
- Pycharm 项目运行的多种技巧
- 如何在虚拟linux环境运行python_Python 虚拟环境 | Mac/Linux下如何避坑安装配置Virtualenv...
- java性能最好的mvc框架_详解Spring MVC的异步模式(高性能的关键)
- 深度优先遍历(DFS)- Letter CasePermutation - Combinations
- 未在本地计算机上注册“OraOLEDB.Oracle”提供程序
- java kml_从Java中的KML文件中提取坐标
- 设置Windows Internet时间同步周期
- elclipse tptp的安装使用
- 责任链模式:“张三为了纪念王二请假的悲催经历想出来的一种设计模式”
- 手写数字图片数据之python读取保存、二值化、灰度化图片+opencv处理图片的方法
- android studio怎么设置,android studio快捷键如何设置 android studio快捷键设置方法
- 网络唤醒的原理原来是这样的,GET!
- 拿到一个网站,怎么判断该网站是否存在sql注入漏洞?
- VC 开机自动启动程序代码
- 中富金石马力老师:2022年中央一号文件发布 时隔多年重提加强粮库建设
- 【Keil编译警告】warning C316:unterminated conditionals
- 手机号归属地数据导入及查询工具源代码(C++)
- 【iOS】【最新】2023苹果开发者账号注册流程(公司类型)