博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spark 学习笔记之 共享变量
阅读量:7237 次
发布时间:2019-06-29

本文共 1769 字,大约阅读时间需要 5 分钟。

共享变量:

 

共享变量

通常情况下,当向Spark操作(如map,reduce)传递一个函数时,它会在一个远程集群节点上执行,它会使用函数中所有变量的副本。这些变量被复制到所有的机器上,远程机器上并没有被更新的变量会向驱动程序回传。在任务之间使用通用的,支持读写的共享变量是低效的。尽管如此,Spark提供了两种有限类型的共享变量,广播变量和累加器。

 

广播变量

广播变量允许程序员将一个只读的变量缓存在每台机器上,而不用在任务之间传递变量。广播变量可被用于有效地给每个节点一个大输入数据集的副本。Spark还尝试使用高效地广播算法来分发变量,进而减少通信的开销。

import org.apache.spark.SparkContextimport org.apache.spark.broadcast.Broadcastimport org.apache.spark.rdd.RDDimport org.apache.spark.sql.SparkSessionimport org.apache.spark.util.LongAccumulator
object TransformationsDemo {  def main(args: Array[String]): Unit = {    val sparkSession = SparkSession.builder().appName("TransformationsDemo").master("local[1]").getOrCreate()    val sc = sparkSession.sparkContext    testBroadcast(sc)  }  private def testBroadcast(sc: SparkContext) = {    val factor = 3    val factorBroadcast: Broadcast[Int] = sc.broadcast(factor)    var data = sc.parallelize(Array(1, 2, 3, 4, 5), 2)    data.map(num => num * factorBroadcast.value).collect().foreach(println)  }}

运行结果:

 

累加器

累加器是仅仅被相关操作累加的变量,因此可以在并行中被有效地支持。它可以被用来实现计数器和总和。

import org.apache.spark.SparkContextimport org.apache.spark.broadcast.Broadcastimport org.apache.spark.rdd.RDDimport org.apache.spark.sql.SparkSessionimport org.apache.spark.util.LongAccumulatorobject TransformationsDemo {  def main(args: Array[String]): Unit = {    val sparkSession = SparkSession.builder().appName("TransformationsDemo").master("local[1]").getOrCreate()    val sc = sparkSession.sparkContext    testAccumulator(sc)  }  private def testAccumulator(sc: SparkContext) = {    val sum: LongAccumulator = sc.longAccumulator("My Accumulator")    var data = sc.parallelize(Array(1, 2, 3, 4, 5), 2)    data.foreach(num => sum.add(num))    println(sum.value)  }}

运行结果:  

 

转载于:https://www.cnblogs.com/AK47Sonic/p/7795278.html

你可能感兴趣的文章
JFinal-layui v1.1 更新,极速开发企业应用系统
查看>>
部署WAR包实时查看Tomcat的状态和日志
查看>>
vex使用...mapActions报错解决办法
查看>>
胡捷:区块链是促进个体信任的“天使”,也是消减中心权利的“魔鬼”
查看>>
使用docker-compose快速搭建zookeeper集群
查看>>
TFC暨智能娱乐展乐相科技陈朝阳致开发者:为什么你要信任虚拟现实
查看>>
Linux中KVM虚拟机是什么
查看>>
「镁客·请讲」Lucia 焦玉龙:用区块链技术切入长租行业,Lucia要做长租领域的变革者...
查看>>
【加法笔记系列】逻辑门、半加器、全加器、波纹进位加法器
查看>>
递归基础思想
查看>>
通过组策略禁止有本地管理员权限的域用户更改网络配置
查看>>
git revert和reset区别
查看>>
Android内存优化2 了解java内存分配 2
查看>>
机器学习的入门逻辑回归
查看>>
“看脸”看不出花,但人工智能可以“看”出性格
查看>>
有了这四个“最”,AI或许可以成功预测地震
查看>>
三角阵
查看>>
Delphi2010中字符串汇编需要注意的一点,以及支持2010的AES加密库
查看>>
ExtJs 修改组件值方式
查看>>
mysql如收集统计信息
查看>>