Point 1:AccumulatorValue
package com.spark.sharevariables.scala
import org.apache.spark.{SparkContext, SparkConf}
/**
* Created by Administrator on 2017/08/02.
* 累加器中的全局变量只能由driver端读取,task只管干活,不能读如果用.value方法的话
* 累加器如果你写到了Transformation这种转换算子内部的话呢,要想让这个累加器生效,必须
* 在这个Transformation操作之前的有action操作!!!!例子如下:
* val accum = sc.accumulator(0)
* data.map { x => accum += x; f(x) }
*/
object AccumulatorValue {
def main(args: Array[String]) {
val conf = new SparkConf().setAppName("AccumulatorValue").setMaster("local")
val sc = new SparkContext(conf)
val sum = sc.accumulator(0,"AccumulatorValue")
val list = Array(1,2,3,4,5)
val listRDD = sc.parallelize(list)
listRDD.foreach(value => {sum +=value;})
println(sum.value)
}
}
Point 2:BroadCastValue
package com.spark.sharevariables.scala
import org.apache.spark.{SparkContext, SparkConf}
/**
* Created by Administrator on 2017/08/02.
*/
object BroadCastValue {
def main(args: Array[String]) {
val conf = new SparkConf().setAppName("BroadCastValue").setMaster("local")
val sc = new SparkContext(conf)
val list = Array(1,2,3,4,5,6)
val f = 3
val broadcastfactor = sc.broadcast(f)
val listRDD = sc.parallelize(list)
val result = listRDD.map(f => f * broadcastfactor.value)
result.foreach(f => println(f))
}
}