spark广播变量

广播变量应用场景

由于spark的应用场景通常是分布式场景,在本地集合和分布式集合关联,且本地集合不太大的场景,rdd的处理是在不同的executor中不同的分区处理的,我们定义的全局变量通常是在driver中的,在executor中并没有,因此spark通过广播变量这种形式,可以把开发者定义的广播变量通过网络传输的方式,传第到每个executor中每个线程处理的分区中,同时,由于同一个executor中可能处理不止一个分区,为了节省内存,只会传输给其中一个线程,其他线程想要访问时,会先去找除自身外的线程是否已经存在广播变量,有则不再传输。

广播变量的使用很简单,将本地集合标识为广播变量即可,下面我们来看一个案例:

python 复制代码
#使用方式:
#1.将本地ist标记成广播变量即可
broadcast = sc.broadcast(stu_info_list)
#2.使用广播变量,从broadcast对象中取出本地list对象即可
value broadcast.value
# 也就是先放进去broadcast内部,然后从broadcast内部在取出来用,中间传输的是broadcast:这个对象了
#只要中间传输的是broadcast对象sparki就会留意,只会给每个Executor发一份了,而不是傻傻的哪个分区要都给.
python 复制代码
coding:utf8
import ...
if __name__ == '__main__':
    conf = SparkConf).setAppName("test").setMaster("local[*]")
    sc = SparkContext(conf=conf)
    stu_info_list = [(1,'张大仙',11),
                     (2,'王晓晓',13),
                     (3,'张甜甜',11),
                     (4,'王大力',11)]
    #1.将本地Python List对象标记为广播变量,不标记实际上每个分区也拿的到但会有内存浪费
    broadcast = sc.broadcast(stu_info_list)
    score_info_rdd = sc.parallelize([
        (1,'语文',99),
        (2,'数学',99),
        (3,'英语',99),
        (4,'编程',99),
        (1,'语文',99),
        (2,'编程',99),
        (3,'语文',99),
        (4,'英语',99),
        (1,'语文',99),
        (3,'英语',99),
        (2,'编程',99)
    ])

    def map_func(data):
        id = data[e]
        name = ""
        #匹配本地list和分布式rdd中的学生ID匹配成功后即可获得当前学生的姓名
        for stu_info in stu_info_list:
            stu_id = stu_info[0]
            if id == stu_id:
               name stu_info[1]
        return (name,data[1],data[2])
    print(score_info_rdd.map(map_func).collect())
      

此外,实际上所有广播变量的方式,都可以用两个rdd之间的join操作来实现同样的结构,如上面将stu_info_list也定义成rdd,但这样会造成数据的一个shuffle,如下,通过id匹配的话会发生多次网络传输,因此我们在本地数据集比较小的时候,可以通过广播变量进行优化,但数据集大时,还是需要分布式操作来加速

相关推荐
听你说328 小时前
科技护航极限征程 三诺生物助力雄关330长城越野赛
大数据·科技·健康医疗
电商API_180079052478 小时前
bilibili关键字搜索视频列表|获取视频详情API调用示例
大数据·数据挖掘·网络爬虫·音视频
数智顾问11 小时前
(151页PPT)XX集团信息化整体架构规划及ERP方案建议书(附下载方式)
大数据·架构
天行健,君子而铎11 小时前
2026年通用行业数据分类分级产品排名——聚焦成本低、全链路覆盖与高性能计算的优质选型
大数据·数据库·人工智能
财经资讯数据_灵砚智能12 小时前
基于全球经济类多源新闻的NLP情感分析与数据可视化(夜间-次晨)2026年6月10日
大数据·人工智能·python·ai·信息可视化·自然语言处理·灵砚智能
电商API_1800790524712 小时前
Python 实现闲鱼商品列表批量采集,接口异常重试机制搭建
大数据·开发语言·数据库·爬虫·python
Java 码思客13 小时前
【ElasticSearch从入门到架构师】第3章:ES 核心基础概念(架构师必备底层认知)
大数据·elasticsearch·jenkins
德昂信息dataondemand13 小时前
BI项目中的主数据管理:如何确保跨部门数据一致性?
大数据
申通之声13 小时前
以体验和AI重构竞争力,申通要“构建生态共同体”
大数据·网络·人工智能·重构·交通物流
terry60013 小时前
2026图形验证码服务商横向测评|口碑、接入、安全选型全指南
java·大数据·人工智能·web安全·信息与通信·数据库架构