通常在向Spark传递函数时,比如使用map()函数或者用filter()传条件时,可以使用驱动器程序中定义的变量,但是集群中运行的每个任务都会得到这些变量的一份新的副本,更新这些副本的值也不会影响驱动器中的对应变量。

Spark中存在两个共享变量,累加器与广播变量,分别为结果聚合与广播这两种常见的通信模式突破了这一限制。

累加器,提供了将工作节点中的值聚合到驱动器程序中的简单语法。累加器的一个常见用途是在调试时对作业执行过程中的事件进行计数。

自Spark2.0版本以后,Spark内置支持三种类型的累加器,分别是集合累加器CollectionAccumulator, 浮点型累加器DoubleAccumulator, 整型累加器LongAccumulator。

使用方法如下:SparkSession spark = SparkSession.builder().master("local[*]").getOrCreate();

SparkContext sc = spark.sparkContext();

// 内置的累加器有三种,LongAccumulator、DoubleAccumulator、CollectionAccumulator

// LongAccumulator: 整型累加

LongAccumulator longAccumulator = sc.longAccumulator("longAccumulator");

// DoubleAccumulator: 浮点型累加

DoubleAccumulator doubleAccumulator = sc.doubleAccumulator("doubleAccumulator");

// CollectionAccumulator:集合累加

CollectionAccumulator collectionAccumulator = sc.collectionAccumulator("collectionAccumulator");

Dataset intSet = spark.createDataset(Arrays.asList(5, 4, 3, 10), Encoders.INT());

Dataset result = intSet.map((MapFunction) x -> {

longAccumulator.add(x);

doubleAccumulator.add(x);

collectionAccumulator.add(x);

return x;

}, Encoders.INT()).cache();

result.count();

System.out.println("::::: longAccumulator: " + longAccumulator.value());

System.out.println("::::: doubleAccumulator: " + doubleAccumulator.value());

System.out.println("::::: collectionAccumulator: " + collectionAccumulator.value());

上述代码输出结果如下:::::: longAccumulator: 22

::::: doubleAccumulator: 22.0

::::: collectionAccumulator: [4, 3, 5, 10]

java 累加器_Spark基础教程——累加器的使用(JAVA)相关推荐

  1. Java Media Framework 基础教程

    Java Media Framework 基础教程 作者:Eric Olson     来源:ibm 摘要: 很少发现有关于jmf方面的中文资料,这是在IBM上面找的一本书,可作为jmf的入门学习,业 ...

  2. Java修炼 之 基础篇(二)Java语言构成

    上次的博文中Java修炼 之 基础篇(一)Java语言特性我们介绍了一下Java语言的几个特性,今天我们介绍一下Java语言的构成. 所谓的Java构成,主要是指Java运行环境的组成,从外围到核心依 ...

  3. B站百万播放量Java零基础教程视频(适合Java 0基础,Java初学入门),史上最细Java零基础教学视频

    是否还在为学习Java如何入门而烦恼? 是否还在为Java软件如何安装而烦恼? 是否还在找寻着适合零基础的Java视频教程? 动力节点教学总监老杜159集课堂实录Java零基础视频教程,从初学者角度出 ...

  4. Java基础教程带你走进java的世界

    Java教程 Java简介 什么是Java? Java是由Sun Microsystems公司于1995年5月推出的Java面向对象程序设计语言和Java平台的总称. Java分为三个体系: Java ...

  5. idea java 单元测试_Java基础教程:IDEA单元测试

    Java基础教程:IDEA单元测试 环境配置 使用idea IDE 进行单元测试,首先需要安装JUnit 插件. 安装JUnit插件步骤 File-->settings-->Plguins ...

  6. java的入门基础教程

    欢迎来月小升博客学习. 1.java初步学习hello word http://java-er.com/blog/java-hello/ 2.java 基本数据类型 http://java-er.co ...

  7. php对接java验签,PHP教程:php对接java现实加签验签的实例

    <PHP教程:php对接java现实加签验签的实例>要点: 本文介绍了PHP教程:php对接java现实加签验签的实例,希望对您有用.如果有疑问,可以联系我们. PHP教程java生成的密 ...

  8. php和java的区别菜鸟教程_浅谈Java和PHP的主要区别

    当谈到PHP与Java的差异性问题时,更多的是回答初学者的一些疑问.对于刚接触IT的同学来说,他们需要做好对未来职业的选择.所以是选择PHP还是选择Java更有利于自身的技术特点和发展前景.所以在解决 ...

  9. 网络java教学_Java基础教程——网络基础知识

    参考阅读[中国互联网发展史]:https://zhuanlan.zhihu.com/p/61602252 协议 计算机网络中的通信必须有一些约定,这些约定称为"通信协议". 通信协 ...

最新文章

  1. Mybatis 中$与#的区别
  2. dreamweaver在onLoad运行RecordsetFind.htm时出错
  3. 解决Uncaught SyntaxError: Unexpected token var报错问题
  4. 160个Crackme020之无OD爆破
  5. error nr.1045 access denied for user 'root'@'localhost' (using passwd:no)
  6. CiscoIOUKeygen
  7. boost::detail::lowest_bit的测试程序
  8. 16岁成为全栈开发者:我从开发游戏到写加密货币投资机器人的心路历程
  9. localhost,127.0.0.1 与 本机IP的区别
  10. [2020.11.4NOIP模拟赛]简单的打击【NTT】
  11. jstack(查看线程)、jmap(查看内存)和jstat(性能分析)命令
  12. 几款极好的 JavaScript 下拉列表插件
  13. 第一篇SCI (IF5),心得交流(写的字数很多),希望多多交流!
  14. SystemC快速实战指南
  15. php h5 调用摄像头_怎样使用H5调用摄像头
  16. 关于WZ指令的配网与烧写固件
  17. 计算机应用基础个人简历制作,计算机应用基础信息技术基础《项目3-4制作个人简历》教案...
  18. 《甘草子·秋暮》 柳永
  19. 密码学概述与基本加密方式
  20. 随笔:读书笔记 --《见识:商业的本质和人生的智慧》

热门文章

  1. vue3以及vue2自定义封装v-model
  2. GBA程序开发入门1
  3. Linux下C库函数到系统调用函数到内核函数调用的过程
  4. Matlab使用xlsread读入xlsx文件错误处理
  5. 夜暗方显万颗星,灯明始见一缕尘
  6. 【报错解决】Parameter ‘XXXX‘ not found. Available parameters are [XXXX1, XXXX2]
  7. 游戏鼠标的dpi测试软件,教你自己测试鼠标的DPI
  8. 【郭东白架构课 模块二:创造价值】17|通用技能(下):架构师如何保障交付与沉淀知识?
  9. 【基于TensorFlow2.3.0的果蔬识别系统的设计】
  10. nexus3.x下载 3.18.1(maven 私服)