Spark共享变量

概述apache

Spark程序的大部分操做都是RDD操做,经过传入函数给RDD操做函数来计算。这些函数在不一样的节点上并发执行,但每一个内部的变量有不一样的做用域,不能相互访问,因此有时会不太方便,Spark提供了两类共享变量供编程使用——广播变量和计数器。编程

 

1. 广播变量缓存

这是一个只读对象,在全部节点上都有一份缓存,建立方法是SparkContext.broadcast(),好比:并发

scala> val broadcastRef= sc.broadcast(Array(1, 2, 3))函数

broadcastRef: org.apache.spark.broadcast.Broadcast[Array[Int]] = Broadcast(0)spa

scala> broadcastVar.valuescala

res0: Array[Int] = Array(1, 2, 3)对象

注意,广播变量是只读的,因此建立以后再更新它的值是没有意义的,通常用val修饰符来定义广播变量。作用域

 

2. 计数器spark

计数器只能增长,是共享变量,用于计数或求和。

计数器变量的建立方法是SparkContext.accumulator(v, name),其中v是初始值,name是名称。

示例以下:

scala> val accum = sc.accumulator(0, "My Accumulator")

accum: org.apache.spark.Accumulator[Int] = 0

scala> sc.parallelize(Array(1, 2, 3, 4)).foreach(x => accum += x)

scala> accum.value

res1: Int = 10

相关文章
相关标签/搜索