Spark特性之共享变量
来源:互联网 发布:马其顿 知乎 编辑:程序博客网 时间:2024/05/26 19:20
Spark为此提供了两种共享变量,一种是Broadcast Variable(广播变量),另一种是Accumulator(累加变量)。Broadcast Variable会将使用到的变量,仅仅为每个节点拷贝一份,更大的用处是优化性能,减少网络传输以及内存消耗。Accumulator则可以让多个task共同操作一份变量,主要可以进行累加操作。
Spark提供的Broadcast Variable,是只读的。并且在每个节点上只会有一份副本,而不会为每个task都拷贝一份副本。因此其最大作用,就是减少变量到各个节点的网络传输消耗,以及在各个节点上的内存消耗。此外,spark自己内部也使用了高效的广播算法来减少网络消耗。
可以通过调用SparkContext的broadcast()方法,来针对某个变量创建广播变量。然后在算子的函数内,使用到广播变量时,每个节点只会拷贝一份副本了。每个节点可以使用广播变量的value()方法获取值。记住,广播变量,是只读的。
例如:
val factor = 3
val factorBroadcast = sc.broadcast(factor)
val arr = Array(1, 2, 3, 4, 5)
val rdd = sc.parallelize(arr)
val multipleRdd = rdd.map(num => num * factorBroadcast.value())
multipleRdd.foreach(num => println(num))
Spark提供的Accumulator,主要用于多个节点对一个变量进行共享性的操作。Accumulator只提供了累加的功能。但是确给我们提供了多个task对一个变量并行操作的功能。但是task只能对Accumulator进行累加操作,不能读取它的值。只有Driver程序可以读取Accumulator的值。
例如:
val sumAccumulator = sc.accumulator(0)
val arr = Array(1, 2, 3, 4, 5)
val rdd = sc.parallelize(arr)
rdd.foreach(num => sumAccumulator += num)
println(sumAccumulator.value)
- Spark特性之共享变量
- spark之广播共享变量broadcast
- Spark编程进阶之共享变量
- spark 5、共享变量
- Spark PG7. 共享变量
- Spark共享变量
- spark-streaming 共享变量
- Spark踩坑记:共享变量
- Spark 共享变量
- Spark共享变量---Java
- Spark共享变量---Scala
- spark中的共享变量
- spark 共享变量
- Spark编程指南入门之Java篇七-共享变量
- Spark分布式编程之全局变量专题【共享变量】
- Spark-神奇的共享变量
- spark共享变量更新操作
- Spark之广播变量
- Java多线程学习
- LightOJ
- Gym
- C++ 直接选择排序的实现实例代码
- 指向多维数组的指针
- Spark特性之共享变量
- Tomcat下使用Druid配置JNDI数据源
- 第4部分库与运行库(第10章 内存)
- H5表单相关新增元素和属性
- 赏析ReentrantLock源码
- Python——代码覆盖报告covera
- 你一定要知道的关于Linux文件目录操作的12个常用命令
- StringBuffer 与 StringBuilder
- 2018校招(持续更新)