JavaSpark-编程进阶-累加器
来源:互联网 发布:要不要复读知乎 编辑:程序博客网 时间:2024/05/17 07:56
spark的一些进阶特性
- 累加器(accumulate):用于聚合和统计
- 广播变量(broadcast variable):高效分发大对象(分发大查询表)
- spark可与外部程序进行交互(R语言编写的脚本进行交互)
- spark为需要大配置代价的操作引入了批操作(查询数据库、连接数据库、创建随机数)
- spark有专用的操作数值数据的方法
驱动器定义的变量可向spark函数(map()、filter())传递,但集群中的每一个任务只会得到变量的副本,更新副本不会影响驱动器中的对应变量(不会反回给driver)
。共享变量(累加器和广播变量突破了这一限制)。
累加器:提供了将worker上的值聚合到driver中的语法(常用于作业执行过程事件的调试。也是对worker返回给driver的值进行聚合)
//累加器 SparkConf conf = new SparkConf().setMaster("local").setAppName("accumulate_test"); JavaSparkContext jsc = new JavaSparkContext(conf); Accumulator<Integer> count = jsc.accumulator(0); List<String> data = new ArrayList<String>(); data.add("haha"); data.add(""); data.add("test"); data.add(""); JavaRDD<String> word = jsc.parallelize(data,2 ); word.mapToPair(x -> { if(x.equals("")){ count.add(1); } return new Tuple2<String,Integer>(x,1); }).collect(); System.out.println(count.value()); jsc.close();
累加器的用法
调用(java)sparkcontext.accumulate(initialvalue)返回一个Accumulator[T]对象
spark闭包里执行代码可用add()增加累加器值
驱动器用value属性访问累加器值
worker上的任务不可访问累加器的值,对于worker的task来说累加器是只写变量,这种模式下累加器实现更高效,不用在每次更新操作都进行通信
(多值跟踪就创建多个累加器)
累加器与容错性
spark机制
- 自动更新执行失败或慢的节点
- 重运行任务获取缓存中被移除数据
- 早结束可取到结果
结果就导致同一个函数对同一数据进行了多次运算,累加器多次传递给excutor节点
在终止操作中累加器只执行一次,转化操作多次执行。想要绝对可靠的累加器就把累加器放在行动操作中
阅读全文
0 0
- JavaSpark-编程进阶-累加器
- JavaSpark-编程进阶-广播变量
- JavaSpark-编程进阶-数值RDD管道基于分区操作
- Spark学习之编程进阶——累加器与广播(5)
- 累加器
- Spark编程指引(四)------------------共享变量(广播变量和累加器)
- Spark编程指引(四)----共享变量(广播变量和累加器)
- 编程进阶
- 编程进阶
- 编程进阶
- 编程进阶
- Spark累加器
- 累加器.exe
- JavaSpark-数据读存-文本文件
- JavaSpark-数据读存-JSON
- JavaSpark-数据读存-CSV
- ASP编程入门进阶
- Java JNI 编程进阶
- JS的事件(1)--焦点事件/event事件/事件流
- python简单文件操作
- android textview 文本在代码中设置粗体效果
- Spring boot 1.5.9 结合 Swagger2 2.7.0 一步一个脚印
- 光荣之路:产品测试规范(十)
- JavaSpark-编程进阶-累加器
- Service: Amazon S3; Status Code: 500; Error Code: InternalError; Request ID: 1512961051843
- Unity配合SQLite开发数据库注意事项
- java嵌套类
- 2018年,每个有追求的设计师都需要面对6个挑战
- Windows套接字I/O模型(1) -- 阻塞模型
- ZkClient之创建节点。
- luoguP3377 【模板】左偏树(可并堆)
- Linux 2.6 CFS 调度算法内幕