文章目录

  • 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共享变量(广播变量与累加器)相关推荐

  1. Spark编程指引(四)----共享变量(广播变量和累加器)

    转自:http://blog.csdn.net/happyanger6/article/details/46576831 共享变量 通常情况下,当向Spark操作(如map,reduce)传递一个函数 ...

  2. Spark共享变量(广播变量、累加器)

    Spark两种共享变量:广播变量(broadcast variable)与累加器(accumulator) 累加器用来对信息进行聚合,而广播变量用来高效分发较大的对象. 共享变量出现的原因: 通常在向 ...

  3. spark共享变量(广播变量Broadcast Variable,累加器Accumulators)

    2019独角兽企业重金招聘Python工程师标准>>> 一般来说,当一个函数被传递给Spark操作(例如map和reduce),在一个远程集群上运行,它实际上操作的是这个函数用到的所 ...

  4. spark广播变量 和 累加器

    1 为什么使用广播变量 和 累加器 变量存在的问题:在spark程序中,当一个传递给Spark操作(例如map和reduce)的函数在远程节点上面运行时,Spark操作实际上操作的是这个函数所用变量的 ...

  5. 【Spark】广播变量和累加器

    文章目录 一.Spark广播变量 二.累加器 Reference 一.Spark广播变量 多进程编程中,不同进程可以通过创建共享内存,进行进程间通信.而在分布式中,Spark通过[广播变量]和[累加器 ...

  6. Spark _15 _广播变量和累加器

    广播变量和累加器 广播变量 广播变量理解图 未使用广播变量: package SparkRadioimport org.apache.spark.rdd.RDD import org.apache.s ...

  7. Spark 广播变量和累加器

    Spark 的一个核心功能是创建两种特殊类型的变量:广播变量和累加器 广播变量(groadcast varible)为只读变量,它有运行SparkContext的驱动程序创建后发送给参与计算的节点.对 ...

  8. spark 获取广播变量_Spark流式程序中广播变量和累加器为何使用单例模式

    Spark中广播变量详解以及如何动态更新广播变量​mp.weixin.qq.com 1.广播变量是只读的,使用单例模式可以减少Spark流式程序中每次job生成执行,频繁创建广播变量带来的开销 2. ...

  9. 031 广播变量与累加器

    1.广播变量机制 将传递给task的值,变成传递给executor. 为什么可以共用,因为task是executor下的线程. 只读的变量,在task中不允许修改 2.累加器介绍 在只写的变量,在ta ...

  10. spark 广播变量大数据_Spark基础知识(三)--- Spark的广播变量和累加器

    在spark程序中,当一个传递给Spark操作(例如map和reduce)的函数在远程节点上面运行时,Spark操作实际上操作的是这个函数所用变量的一个独立副本.这些变量会被复制到每台机器上,并且这些 ...

最新文章

  1. 铁路网上购票需要完善但值得鼓励
  2. ionic模版引擎及循环
  3. Linux源代码软件安装,Linux软件安装:源代码与软件安装
  4. windows CMD生成文件夹树状图(tree)命令(以图形显示驱动器或路径的文件夹结构)
  5. c语言实现有限域模多项式_有限域计算简述
  6. PDH-SDH光端机指示灯具体含义介绍
  7. html5 2015,2015年有用的16大免费的响应式HTML5框架
  8. 星载计算机西北工业大学,星载计算机SRAM加固可靠性的研究与设计
  9. 54-locate 简明笔记
  10. NOIP2013D1T3货车运输(最大生成树+倍增lca)
  11. 基于asp. net sql快餐外卖设计网站成品
  12. 蒟蒻的HNOI2017滚粗记
  13. IBM Systems Director VMControl资源生命周期管理,第2部分
  14. 2019新版c智播客h马程序员H5全栈工程师培训项目实战
  15. SD卡无法格式化的原因分析
  16. 全国大学的ftp及部分免费ftp地址
  17. 在style中设置图片背景
  18. 高通骁龙665能不能升级鸿蒙系统,高通骁龙665性能好不好 高通骁龙665性能测试...
  19. Java语言简介和基础
  20. 12步解N-S方程之第二步

热门文章

  1. 整理苹果官网上iOS的各种辅助功能
  2. 系统重温Pandas笔记:(五)变形
  3. 一口气说出 OAuth2.0 的四种授权方式,面试官会高看一眼
  4. win7网络共享连接计算机需要密码,win7系统共享打印机需要用户名和密码的解决办法...
  5. 线程2--主线程(main线程)
  6. UE支持的Codec对比
  7. STM32F7--->FMC(可变存储控制器) Flexible Memory Controller
  8. Windows 2003 Server报 由于这台计算机没有远程桌面客户端访问许可证
  9. PTB-XL大型的心电图数据集
  10. uni-app ios 添加测试新设备,只需下载描述文件