- 共享变量
- 定义:
Spark
是集群部署的,当我们Spark
执行程序需要依赖于一个单独的成员变量,那么spark就会把这个变量发送到worker
节点上的每个Executor
下的所有对应的task
中,如果共享变量很大,那么就会对网络开销比较大,影响作业的执行效率,所以就引入了广播变量和累加器的概念。
- 定义:
广播变量
- 定义:广播变量允许程序将只读的变量发送到每台Worker节点上,而不是发送到每个Task上。例如它可以高效的向每个节点输入一个大型的数据集的副本集。Spark尝试通过高效的广播算法来减少网络开销。
用法
val conf = new SparkConf().setAppName("").setMaster("local") val sc = new SparkContext(conf) val factor = 3 //创建广播变量 val factorBroadcast: Broadcast[Int] = sc.broadcast(factor) val rdd: RDD[Int] = sc.parallelize(Array(1,2,3,4,5)).map(_+factorBroadcast.value) rdd.foreach(println(_))
累加器
- 定义:累加器只不过是一种别相关操作累加计数的一种变量,它被用来计数器或者总和。累加器对变量
v
调用sc.accumulator(v)
来创建,在集群上可以使用add或者“+=”
来实现累加功能。注意的是累加器的值只有Driver
程序能够读取他的值 用法
//创建累加器 val accum = sc.longAccumulator("My Accumulator") //使用累加器 sc.parallelize(Array(1, 2, 3, 4)).foreach(x => accum.add(x)) //获取累加器的结果 accum.value
- 定义:累加器只不过是一种别相关操作累加计数的一种变量,它被用来计数器或者总和。累加器对变量
Spark Core(七)共享变量、广播变量、累加器
最新推荐文章于 2024-11-24 17:09:02 发布