李林超博客
首页
归档
留言
友链
动态
关于
归档
留言
友链
动态
关于
首页
大数据
正文
SparkCore之广播变量
Leefs
2021-11-09 PM
1872℃
0条
[TOC] ### 一、定义 **广播变量:**分布式共享只读变量 ### 二、作用 + 在多个并行操作中(Executor)使用同一个变量,Spark默认会为每个任务(Task)分别发送,这样如果共享比较大的对象,会占用很大工作节点的内存。 + 广播变量用来高效分发较大的对象。向所有工作节点发送一个较大的只读值,以供一个或多个Spark操作使用。比如,如果你的应用需要向所有节点发送一个较大的只读查询表,甚至是机器学习算法中的一个很大的特征向量,广播变量用起来都很顺手。 ### 三、原理说明  **说明** + 如果不采用广播变量的方式,list需要将数据发送给每一个task + 采用广播变量的方式,只需要将数据发送到每一个Executor,其他任务在执行的时候直接获取保存在Executor中的同一份数据。 + 弊端Executor中的数据只支持读,不能进行修改,所以称为**分布式共享只读变量**。 ### 四、实现 #### 4.1 实现步骤 ``` 1. 通过对一个类型T的对象调用`SparkContext.broadcast`创建出一个Broadcast[T]对象,任何可序列化的类型都可以这么实现。 2. 通过value属性访问该对象的值 3. 变量只会被发到各个节点一次,应作为只读值处理(修改这个值不会影响到别的节点) ``` #### 4.2 代码 ```scala import org.apache.spark.broadcast.Broadcast import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /** * @author lilinchao * @date 2021/11/9 * @description 广播变量 **/ object Test10_BroadCast { def main(args: Array[String]): Unit = { val sparConf = new SparkConf().setMaster("local[*]").setAppName("Test10_BroadCast") val sc = new SparkContext(sparConf) //需求:想实现类似join效果 (a,(1,4)),(b,(2,5)),(c,(3,6)) val rdd: RDD[(String, Int)] = sc.makeRDD(List(("a",1),("b",2),("c",3))) val list: List[(String, Int)] = List(("a",4),("b",5),("c",6)) // 声明一个广播变量 val broadcastList: Broadcast[List[(String, Int)]] = sc.broadcast(list) val resRDD: RDD[(String, (Int, Int))] = rdd.map { case (k1, v1) => { var v3 = 0 //for ((k2, v2) <- list) { // 使用广播变量 for ((k2, v2) <- broadcastList.value) { if (k1 == k2) { //(k1, (v1, v2)) v3 = v2 } } (k1, (v1, v3)) } } resRDD.collect().foreach(println) // 关闭连接 sc.stop() } } ``` **运行结果** ``` (a,(1,4)) (b,(2,5)) (c,(3,6)) ``` *附参考原文链接地址:* *https://blog.csdn.net/qq_41818801/article/details/106171910*
标签:
Spark
,
Spark Core
非特殊说明,本博所有文章均为博主原创。
如若转载,请注明出处:
https://www.lilinchao.com/archives/1619.html
上一篇
SparkCore之累加器
下一篇
SparkSQL案例实操(一)
评论已关闭
栏目分类
随笔
2
Java
326
大数据
229
工具
31
其它
25
GO
47
NLP
8
标签云
Livy
Java工具类
Docker
JavaScript
并发编程
RSA加解密
DataWarehouse
NIO
GET和POST
VUE
哈希表
设计模式
稀疏数组
并发线程
ajax
Golang
Zookeeper
Java
Elasticsearch
容器深入研究
机器学习
Tomcat
正则表达式
链表
递归
MyBatis
Kafka
二叉树
Git
Typora
友情链接
申请
范明明
庄严博客
Mx
陶小桃Blog
虫洞
评论已关闭