您的位置:首页 > 其它

spark 5、共享变量

2016-06-07 17:48 363 查看
 5、共享变量

   Spark提供了两种限制的共享变量,Broadcast和Accumulators。

   (1)Broadcast允许程序员持有一个只读的变量在各个节点之间,它一个常用的场景就是用它来存储一个很大的输入的数据集给每个节点使用,Spark会只用它独有的广播算法来减少通信损失。下面是例子:

scala> val broadcastVar = sc.broadcast(Array(1, 2, 3))
broadcastVar: spark.Broadcast[Array[Int]] = spark.Broadcast(b5c40191-a864-4c7d-b9bf-d87e1a4e787c)

scala> broadcastVar.value
res0: Array[Int] = Array(1, 2, 3)


 

    (2)Accumulators是用来计数或者求总数的,使用SparkContext.accumulator(v)来给它一个初始化的值,然后用“+=”来进行操作,但是任务之间不能得到它的结果,只有驱动任务的程序可以得到它的结果。下面是例子:

scala> val accum = sc.accumulator(0)
accum: spark.Accumulator[Int] = 0

scala> sc.parallelize(Array(1, 2, 3, 4)).foreach(x => accum += x)
...
10/09/29 18:41:08 INFO SparkContext: Tasks finished in 0.317106 s

scala> accum.value
res2: Int = 10


 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: