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

相關文章
相關標籤/搜索