文章目录

  • 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相关推荐

  1. 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 ...

  2. Spark一路火花带闪电——Spark底层原理介绍

    文章目录 Spark计算引擎原理 1.1 术语 1.1.1 Application:Spark应用程序 1.1.2 Driver:驱动程序 1.1.3 Cluster Manager:资源管理器 1. ...

  3. Spark一路火花带闪电——Spark踩坑记

    文章目录 坑有哪些? 踩坑记:版本号一定要正确!!!JDK一定要匹配. 使用idea打包maven项目 坑有哪些? ClassNotFoundException:表明maven依赖和服务器中的版本不匹 ...

  4. Spark一路火花带闪电——Spark常用算子(参数及其返回值)探究

    文章目录 转化算子 行动算子 转化算子 以数据Seq(1,2,3,3)为例子 map(f:T => U):RDD[U] 映射:将函数应用于RDD内的每个元素,将其返回值构成新的RDD rdd.m ...

  5. Spark一路火花带闪电——Pair RDD常用算子(参数及其返回值)探究

    文章目录 转化算子 行动算子 转化算子 以键值对集合{(1,2),(3,4),(3,6)}为例 RDD[U,T]注意下面的函数,对应U和T reduceByKey(f:(T,T) => T):R ...

  6. 手拿菜刀砍电线,一路火花带闪电,神经病人思维广,弱智孩子欢乐多!

    150条经典装逼语录,签名专用 ~~~手拿菜刀砍电线,一路火花带闪电~~~(转) 2009年07月26日 星期日 12:10 1.<卖火柴的小女孩>这篇文章主要写得是:一个小女孩五次擦火柴 ...

  7. 程序猿菜鸟打怪升级—一路火花带闪电

    文章目录 一. 昨夜西风凋碧树,独上高楼,望尽天涯路 二. 衣带渐宽终不悔,为伊消得人憔悴 三.众里寻他千百度,蓦然回首,那人却在,灯火阑珊处 [告别平庸的9个方法] 各位小伙伴,大家好!我是猿人谷, ...

  8. Spark(火花)快速、通用的大数据处理引擎框架

    一.什么是Spark(火花)? 是一种快速.通用处理大数据分析的框架引擎. 二.Spark的四大特性 1.快速: Spark内存上采用DAG(有向无环图)执行引擎非循环数据流和内存计算支持. 内存上比 ...

  9. 阿里内部的那个牛逼带闪电的Java诊断工具arthas终于开源了

    在阿里巴巴内部,有很多自研工具供开发者使用,其中有一款工具,是几乎每个Java开发都使用过的工具,那就是Arthas,这是一款Java诊断工具,是一款牛逼带闪电的工具.该工具已于2018年9月份开源. ...

最新文章

  1. Hadoop技术之Hadoop HA 机制学习
  2. [css] 如何使用css实现跨浏览器的最小高度?
  3. Pycharm 项目运行的多种技巧
  4. 如何在虚拟linux环境运行python_Python 虚拟环境 | Mac/Linux下如何避坑安装配置Virtualenv...
  5. java性能最好的mvc框架_详解Spring MVC的异步模式(高性能的关键)
  6. 深度优先遍历(DFS)- Letter CasePermutation - Combinations
  7. 未在本地计算机上注册“OraOLEDB.Oracle”提供程序
  8. java kml_从Java中的KML文件中提取坐标
  9. 设置Windows Internet时间同步周期
  10. elclipse tptp的安装使用
  11. 责任链模式:“张三为了纪念王二请假的悲催经历想出来的一种设计模式”
  12. 手写数字图片数据之python读取保存、二值化、灰度化图片+opencv处理图片的方法
  13. android studio怎么设置,android studio快捷键如何设置 android studio快捷键设置方法
  14. 网络唤醒的原理原来是这样的,GET!
  15. 拿到一个网站,怎么判断该网站是否存在sql注入漏洞?
  16. VC 开机自动启动程序代码
  17. 中富金石马力老师:2022年中央一号文件发布 时隔多年重提加强粮库建设
  18. 【Keil编译警告】warning C316:unterminated conditionals
  19. 手机号归属地数据导入及查询工具源代码(C++)
  20. 【iOS】【最新】2023苹果开发者账号注册流程(公司类型)

热门文章

  1. 菲尔顿宠物:猫咪有哪些不能随便去碰的部位 分析如下
  2. 计算机控制菜单,CRH1型动车组计算机控制系统IDU菜单系统功能概述.docx
  3. 百度语音+自动驾驶感知+深度学习平台技术解析
  4. 戴尔r320服务器系统,戴尔R320服务器的定位、特性及配置
  5. win10 go环境配置
  6. linux c语言 线程sleep有关测试总结
  7. 自己动手开发emlog插件
  8. 普通人想要通过互联网来赚钱,无非就是在这些平台上面来下功夫
  9. java开发人员必去的知名国外网站
  10. 微信小程序之自动跳转页面