RDD优化--RDD共享变量(广播变量与累加器)
文章目录
- 1、简介
- 2、广播变量
- 3、累加器
1、简介
在Spark中,提供了两种类型的共享变量:广播变量 (broadcast variable)与累加器 (accumulator) :
- 广播变量:主要用于在节点间高效分发大对象。
- 累加器:用来对信息进行聚合,主要用于累计计数等场景;
2、广播变量
广播变量:允许开发者将一个只读变量(Driver端)缓存到每个节点(Executor)上,而不是每个任务传递一个副本。
每个 Task 任务的闭包都会持有自由变量的副本,如果变量很大且 Task 任务很多的情况下,这必然会对网络 IO 造成压力,为了解决这个情况,Spark 提供了广播变量。
广播变量的做法很简单:就是不把副本变量分发到每个 Task 中,而是将其分发到每个 Executor,Executor 中的所有 Task 共享一个副本变量。
// 把一个数组定义为一个广播变量
val broadcastVar = sc.broadcast(Array(1, 2, 3, 4, 5))
// 之后用到该数组时应优先使用广播变量,而不是原值
sc.parallelize(broadcastVar.value).map(_ * 10).collect() //访问方式:broadcastVar.value
注意事项:
- 1、Driver端变量在每个Executor每个Task保存一个变量副本
- 2、Driver端广播变量在每个Executor只保存一个变量副本
import org.apache.spark.{SparkConf, SparkContext}object BroadcastDemo {def main(args: Array[String]): Unit = {val conf = new SparkConf().setMaster("local[1]").setAppName("BroadcastDemo")val sc = SparkContext.getOrCreate(conf)//广播val arr = Array("hello","hi","good afternoon")val hei = sc.broadcast(arr)val rdd1 = sc.parallelize(List((1,"zhangsan"),(2,"lisi"),(3,"wangwu")))val rdd2 = rdd1.mapValues(x => {//使用时才传给worker/*println(x)println(arr.toString())arr(0) + ":" + x*///广播变量,提前说println(hei.value.toList)hei.value(0) + ":" + x})rdd2.foreach(println)}
}
/*输出:
List(hello, hi, good afternoon)
(1,hello:zhangsan)
List(hello, hi, good afternoon)
(2,hello:lisi)
List(hello, hi, good afternoon)
(3,hello:wangwu)
*/
3、累加器
原理:将每个副本变量的最终值传回 Driver,由 Driver 聚合后得到最终值,并更新原始变量。
只允许added操作,常用于实现计数。
import org.apache.spark.{SparkConf, SparkContext}object AccumulatorDemo {def main(args: Array[String]): Unit = {val conf = new SparkConf().setMaster("local[2]").setAppName("AccumulatorDemo")val sc = SparkContext.getOrCreate(conf)val accum = sc.accumulator(0,"aaa") //第一个参数:初始值 第二个参数:namesc.parallelize(Array(1,2,3,4)).foreach(x=>{accum+=x;accum})println(accum.value)//拓展:glom 打印分区val rdd1 = sc.makeRDD(List(1,2,3,4))rdd1.glom().collect().foreach(x=>println(x.toList))}
}
/*输出:
10
List(1, 2)
List(3, 4)
*/
RDD优化--RDD共享变量(广播变量与累加器)相关推荐
- Spark编程指引(四)----共享变量(广播变量和累加器)
转自:http://blog.csdn.net/happyanger6/article/details/46576831 共享变量 通常情况下,当向Spark操作(如map,reduce)传递一个函数 ...
- Spark共享变量(广播变量、累加器)
Spark两种共享变量:广播变量(broadcast variable)与累加器(accumulator) 累加器用来对信息进行聚合,而广播变量用来高效分发较大的对象. 共享变量出现的原因: 通常在向 ...
- spark共享变量(广播变量Broadcast Variable,累加器Accumulators)
2019独角兽企业重金招聘Python工程师标准>>> 一般来说,当一个函数被传递给Spark操作(例如map和reduce),在一个远程集群上运行,它实际上操作的是这个函数用到的所 ...
- spark广播变量 和 累加器
1 为什么使用广播变量 和 累加器 变量存在的问题:在spark程序中,当一个传递给Spark操作(例如map和reduce)的函数在远程节点上面运行时,Spark操作实际上操作的是这个函数所用变量的 ...
- 【Spark】广播变量和累加器
文章目录 一.Spark广播变量 二.累加器 Reference 一.Spark广播变量 多进程编程中,不同进程可以通过创建共享内存,进行进程间通信.而在分布式中,Spark通过[广播变量]和[累加器 ...
- Spark _15 _广播变量和累加器
广播变量和累加器 广播变量 广播变量理解图 未使用广播变量: package SparkRadioimport org.apache.spark.rdd.RDD import org.apache.s ...
- Spark 广播变量和累加器
Spark 的一个核心功能是创建两种特殊类型的变量:广播变量和累加器 广播变量(groadcast varible)为只读变量,它有运行SparkContext的驱动程序创建后发送给参与计算的节点.对 ...
- spark 获取广播变量_Spark流式程序中广播变量和累加器为何使用单例模式
Spark中广播变量详解以及如何动态更新广播变量mp.weixin.qq.com 1.广播变量是只读的,使用单例模式可以减少Spark流式程序中每次job生成执行,频繁创建广播变量带来的开销 2. ...
- 031 广播变量与累加器
1.广播变量机制 将传递给task的值,变成传递给executor. 为什么可以共用,因为task是executor下的线程. 只读的变量,在task中不允许修改 2.累加器介绍 在只写的变量,在ta ...
- spark 广播变量大数据_Spark基础知识(三)--- Spark的广播变量和累加器
在spark程序中,当一个传递给Spark操作(例如map和reduce)的函数在远程节点上面运行时,Spark操作实际上操作的是这个函数所用变量的一个独立副本.这些变量会被复制到每台机器上,并且这些 ...
最新文章
- 铁路网上购票需要完善但值得鼓励
- ionic模版引擎及循环
- Linux源代码软件安装,Linux软件安装:源代码与软件安装
- windows CMD生成文件夹树状图(tree)命令(以图形显示驱动器或路径的文件夹结构)
- c语言实现有限域模多项式_有限域计算简述
- PDH-SDH光端机指示灯具体含义介绍
- html5 2015,2015年有用的16大免费的响应式HTML5框架
- 星载计算机西北工业大学,星载计算机SRAM加固可靠性的研究与设计
- 54-locate 简明笔记
- NOIP2013D1T3货车运输(最大生成树+倍增lca)
- 基于asp. net sql快餐外卖设计网站成品
- 蒟蒻的HNOI2017滚粗记
- IBM Systems Director VMControl资源生命周期管理,第2部分
- 2019新版c智播客h马程序员H5全栈工程师培训项目实战
- SD卡无法格式化的原因分析
- 全国大学的ftp及部分免费ftp地址
- 在style中设置图片背景
- 高通骁龙665能不能升级鸿蒙系统,高通骁龙665性能好不好 高通骁龙665性能测试...
- Java语言简介和基础
- 12步解N-S方程之第二步
热门文章
- 整理苹果官网上iOS的各种辅助功能
- 系统重温Pandas笔记:(五)变形
- 一口气说出 OAuth2.0 的四种授权方式,面试官会高看一眼
- win7网络共享连接计算机需要密码,win7系统共享打印机需要用户名和密码的解决办法...
- 线程2--主线程(main线程)
- UE支持的Codec对比
- STM32F7--->FMC(可变存储控制器) Flexible Memory Controller
- Windows 2003 Server报 由于这台计算机没有远程桌面客户端访问许可证
- PTB-XL大型的心电图数据集
- uni-app ios 添加测试新设备,只需下载描述文件