李林超博客
首页
归档
留言
友链
动态
关于
归档
留言
友链
动态
关于
首页
大数据
正文
SparkCore之广播变量
Leefs
2021-11-09 PM
980℃
0条
[TOC] ### 一、定义 **广播变量:**分布式共享只读变量 ### 二、作用 + 在多个并行操作中(Executor)使用同一个变量,Spark默认会为每个任务(Task)分别发送,这样如果共享比较大的对象,会占用很大工作节点的内存。 + 广播变量用来高效分发较大的对象。向所有工作节点发送一个较大的只读值,以供一个或多个Spark操作使用。比如,如果你的应用需要向所有节点发送一个较大的只读查询表,甚至是机器学习算法中的一个很大的特征向量,广播变量用起来都很顺手。 ### 三、原理说明 ![22.Spark广播变量01.png](https://lilinchao.com/usr/uploads/2021/11/1958904591.png) **说明** + 如果不采用广播变量的方式,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://lilinchao.com/archives/1619.html
上一篇
SparkCore之累加器
下一篇
SparkSQL案例实操(一)
取消回复
评论啦~
提交评论
栏目分类
随笔
2
Java
326
大数据
229
工具
31
其它
25
GO
47
标签云
Flume
Quartz
MyBatis-Plus
Livy
ajax
Docker
散列
稀疏数组
Golang基础
高并发
队列
数据结构
FastDFS
Kafka
Redis
微服务
GET和POST
并发线程
Linux
Git
链表
Spark
Spark SQL
Sentinel
RSA加解密
BurpSuite
数学
人工智能
Hadoop
SpringBoot
友情链接
申请
范明明
庄严博客
Mx
陶小桃Blog
虫洞