李林超博客
首页
归档
留言
友链
动态
关于
归档
留言
友链
动态
关于
首页
大数据
正文
SparkCore之广播变量
Leefs
2021-11-09 PM
1597℃
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
NLP
4
标签云
Python
国产数据库改造
Nacos
Hbase
Elastisearch
稀疏数组
Java
Spark
工具
BurpSuite
Java工具类
HDFS
散列
Azkaban
Kibana
DataWarehouse
Yarn
Tomcat
数学
容器深入研究
哈希表
JavaWEB项目搭建
Git
FastDFS
查找
Hive
Http
微服务
MyBatis-Plus
机器学习
友情链接
申请
范明明
庄严博客
Mx
陶小桃Blog
虫洞
评论已关闭