13-pyspark的共享变量用法总结
目录
- 前言
- 广播变量
- 广播变量的作用
- 广播变量的使用方式
- 累加器
- 累加器的作用
- 累加器的优缺点
- 累加器的使用方式
PySpark实战笔记系列第四篇

- 10-用PySpark建立第一个Spark RDD(PySpark实战笔记系列第一篇)
- 11-pyspark的RDD的变换与动作算子总结(PySpark实战笔记系列第二篇))
- 12-pyspark的RDD算子注意事项总结(PySpark实战笔记系列第三篇)
- 13-pyspark的共享变量用法总结(PySpark实战笔记系列第四篇)
前言
spark提供两种特定的共享方式:广播变量 和 累加器。
广播变量
广播变量允许程序缓存一个只读变量在集群的每个机器上。广播变量就是普通变量的一个包装变量。
广播变量的作用
可以用一种更高效的方式来共享一些数据,比如一个全局配置文件,可以通过广播变量共享给所有节点。
广播变量的使用方式
创建:通过调用SparkContext.broadcast()方法来将一个普通变量创建为一个广播变量。
访问:通过value方法来访问。
更新:通过unpersist()方法声明更新,然后修改原始变量的值,通过再次广播从而被其他节点获取。
销毁:通过destroy()方法可以把广播变量的数据和元数据一起销毁掉,销毁后不能再使用。
# 示例
import findspark
findspark.init()
##############################################
from pyspark.sql impot SparkSession
spark = SparkSession.builder \.master("local[2]") \.appName("broadcastDemo") \.getOrCreate();
sc = spark.SparkContext
##############################################
ip_mes = {"ip":"127.0.0.2","key":"password"}
# 创建广播变量
brVar = sc.broadcast(ip_mes)# 获取广播变量的值
val = brVar.value
# {"ip":"127.0.0.2","key":"password"}
print(val)
# password
print(val["key"])
# 更新广播变量
brVar.unpersist()
ip_mes["key"] = "admin"
brVar = sc.broadcast(ip_mes) #再次广播
# 获取广播后的变量值
val = brVar.value
# {"ip":"127.0.0.2","key":"admin"}
print(val)
# 销毁广播变量
brVar.destroy()
##############################################
sc.stop()
累加器
除了广播变量进行变数共享外,Spark还提供了一种累加器用于在集群中共享数据。。Spark原生支持数值类型的累加器,开发人员可以根据自己的需求来支持其他数据类型。
累加器的作用
一个常见的作用是:在调试时对作业的执行过程中的相关事件进行计数。
累加器的优缺点
优点:能够快速执行操作。
缺点:只能利用关联操作做“加”操作的变量。
累加器的使用方式
创建:通过SparkContext.accumulator()方法来创建出累加器对象。
访问:通过value方法来访问。
更新:不同节点上的计算任务都可以利用add方法或者使用**+=操作**来给累加器加值。
注意事项 :
- 累加器是一种只可加的变量对象,比如不能执行-=操作。
- 使用累加器时,为了保证准确性,只能使用一次动作操作。如果需要使用多次动作操作,则在RDD对象上执行cache或persist操作来切断依赖。
# 示例
import findspark
findspark.init()
##############################################
from pyspark.sql impot SparkSession
spark = SparkSession.builder \.master("local[2]") \.appName("broadcastDemo") \.getOrCreate();
sc = spark.SparkContext
##############################################
rdd = sc.range(1,101)
# 创建累加器,初始值0
acc = sc.accumulator(0)
def countEnve(x):global accif x%2 == 0:acc +=1 # 累加器更新
rdd_count = rdd.map(countEnve)
# 获取累加器值
# 0 因为未执行动作操作,即countEnve函数的逻辑还未执行
print(acc.value)
"""
保证多次正确获取累加器值,否则当我们再次执行rdd_count.count(),
累加器会再次执行。
rdd_counter.persist()切断了动作操作的链条,因此只会执行一次。
"""
rdd_count.persist()
# 100
print(rdd_count.count())
# 50
print(acc.value)# 100
print(rdd_count.count())
# 50
print(acc.value)
##############################################
sc.stop()
ps:上述示例代码,待实际反复运行!确认其运行过程。
参考文档:
- https://spark.apache.org/docs/latest/api/python/reference/pyspark.html
- 《Python大数据处理库PySpark实战》
博主写博文就是方便对自己所学所做的事做一备份记录或回顾总结。欢迎留言,沟通学习。
刚开始接触,请多指教,欢迎留言交流!

相关文章:
13-pyspark的共享变量用法总结
目录 前言广播变量广播变量的作用 广播变量的使用方式 累加器累加器的作用累加器的优缺点累加器的使用方式 PySpark实战笔记系列第四篇 10-用PySpark建立第一个Spark RDD(PySpark实战笔记系列第一篇)11-pyspark的RDD的变换与动作算子总结(PySpark实战笔记系列第二篇))12-pysp…...
BI数据分析软件:行业趋势与功能特点剖析
随着数据量的爆炸性增长,企业对于数据的需求也日益迫切。BI数据分析软件作为帮助企业实现数据驱动决策的关键工具,在当前的商业环境中扮演着不可或缺的角色。本文将从行业趋势、功能特点以及适用场景等方面,深入剖析BI数据分析软件࿰…...
centos7上docker搭建vulhub靶场
1 vulhub靶场概述 VulHub是一个在线靶场平台,提供了丰富的漏洞环境供安全爱好者学习和实践。 该平台主要面向网络安全初学者和进阶者,通过模拟真实的漏洞环境,帮助用户深入了解漏洞的成因、利用方式以及防范措施。 此外,VulHub还…...
Flutter入门指南
文章目录 一、环境搭建二、基本概念三、创建一个简单的Flutter应用四、常用组件及代码示例五、总结推荐阅读 笔者项目中使用Flutter的模块并不多。虽然笔者还没有机会在项目中正式使用Flutter,但是也在学习Flutter的一些基本用法。本文就是一篇Flutter的入门介绍&am…...
keepalived脑裂问题
脑裂问题产生的原因 就是vip同时存在 master和backup 就叫做脑裂 比如说 backup 机器的防火墙没关,并且没有允许vrrp通过,backup 没有收到master的心跳数据,就会抢夺资源,发生脑裂问题测试 我们打开test3的防火墙,此…...
【Linux笔记】编mysql库
说明当前编译条件:使用cmake 进行编译<当前编译为Ubuntu PC 版本 在虚拟机上面使用> 一、 cmake 库 【 cmake version 3.16.3 】 二、 openssl 库 【 libopenssl-1.1.1K 】 三、mysql 库 【mysql-5.7.36 】 四、boost 库 【boost_1_59_0 】 一、安装cmake 1.1…...
vscode远程免密登录ssh
vscode远程免密登录ssh 1. 安装vscode2. 安装ssh3. 本地vscode配置免密登录远端开发机1. 本地配置秘钥2. 远程开发机配置秘钥 4. vscode常用小工具1. vscode怎么设置ctrl加滚轮放大字体 1. 安装vscode 2. 安装ssh 设置符号打开config配置文件,点击符号ssh连接新的远…...
2024年MathorCup数模竞赛C题详解
C题持续更新中 问题一问题二代码混合ARIMA-LSTM模型构建完整数据与代码第一问第二问 问题一 问题一要求对未来30天每天及每小时的货量进行预测。首先,利用混合ARIMA-LSTM模型进行时间序列预测。ARIMA模型擅长捕捉线性特征和趋势,而LSTM模型处理非线性关…...
【简单讲解如何安装与配置Composer】
🎥博主:程序员不想YY啊 💫CSDN优质创作者,CSDN实力新星,CSDN博客专家 🤗点赞🎈收藏⭐再看💫养成习惯 ✨希望本文对您有所裨益,如有不足之处,欢迎在评论区提出…...
深入理解Apache ZooKeeper与Kafka的协同工作原理
目录 引言 一、ZooKeeper基础概念 (一)ZooKeeper简介 (二)ZooKeeper数据结构 (三)ZooKeeper特点 (四)应用场景 二、ZooKeeper工作模式 (一)工作机制 …...
js解密心得,记录一次抓包vue解密过程
背景 有个抓包结果被加密了 1、寻找入口,打断点 先正常请求一次,找到需要的请求接口。 寻找入口,需要重点关注几个关键字:new Promise 、new XMLHttpRequest、onreadystatechange、.interceptors.response.use、.interceptors.r…...
redis-哨兵模式
一,哨兵的作用: 通过发送命令,让Redis服务器返回监控其运行状态,包括主服务器和从服务器。当哨兵监测到master宕机,会自动将slave切换成master,然后通过发布订阅模式通知其他的从服务器,修改配…...
自动化测试中的SOLID原则
自动化测试在软件质量保障手段中愈显重要 。但是随着自动化测试代码的规模和复杂性不断扩大,它也很容易出现测试代码重复、紧耦合等问题。而SOLID原则可以解决这一问题,作为自动化用例开发的指导原则。 探索SOLID原则 SOLID原则是一组指导软件开发人员…...
tencentcloud-sdk-python-iotexplorer和tencent-iot-device有什么区别
1. tencent-iot-device tencent-iot-device 是腾讯云提供的物联网设备 SDK,用于在物联网场景中开发和连接设备。这个 SDK 提供了丰富的功能和接口,可以帮助开发者快速构建稳定、高效的物联网应用。 主要功能和特点: 设备连接管理࿱…...
Spring day1
day01_eesy_01jdbc pom.xml<packaging>jar</packaging> <dependencies><!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --><!--依赖--><dependency><groupId>mysql</groupId><artifactId>mysql-…...
设计模式: 行为型之中介者模式(18)
中介者模式概述 中介者模式(Mediator Pattern)是一种行为设计模式,它用于减少对象之间的直接交互,从而使其可以松散耦合中介者模式通过引入一个中介者对象来协调多个对象之间的交互,使得这些对象不需要知道彼此的具体…...
计算机网络的起源与发展历程
文章目录 前言时代背景ARPANET 的诞生TCP/IP 协议簇与 Internet 的诞生HTTP 协议与 Web 世界结语 前言 在当今数字化时代,计算机网络已经成为我们生活中不可或缺的一部分。无论是在家庭、学校、还是工作场所,我们都能感受到网络的巨大影响。随着互联网的…...
2024-4-12-实战:商城首页(下)
个人主页:学习前端的小z 个人专栏:HTML5和CSS3悦读 本专栏旨在分享记录每日学习的前端知识和学习笔记的归纳总结,欢迎大家在评论区交流讨论! 文章目录 作业小结 作业 .bg-backward {width: 60px; height: 60px;background: url(..…...
一、flask入门和视图
run启动参数 模板渲染 后端给前端页面传参 前端页面设置css from flask import Flask, render_template,jsonify# 创建flask对象 app Flask(__name__)# 视图函数 路由route app.route("/") def hello_world():# 响应,返回给前端的数据return "h…...
Selenium+Chrome Driver 爬取搜狐页面信息
进行selenium包和chromedriver驱动的安装 安装selenium包 在命令行或者anaconda prompt 中输入 pip install Selenium 安装 chromedriver 先查看chrome浏览器的版本 这里是 123.0.6312.106 版 然后在http://npm.taobao.org/mirrors/chromedriver/或者https://googlechrom…...
libiec61850实战:客户端如何动态遍历未知设备的数据模型
1. 理解libiec61850动态模型遍历的核心场景 在工业自动化系统中,经常会遇到需要对接未知型号IED设备的情况。想象一下你作为系统集成商,现场新安装了一台保护装置或智能传感器,但手头没有它的SCL配置文件(.cid或.scd)。…...
WarcraftHelper:让魔兽争霸3在现代电脑重获新生的终极解决方案
WarcraftHelper:让魔兽争霸3在现代电脑重获新生的终极解决方案 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 还在为魔兽争霸3在Windows …...
AI模型产权保护进入倒计时(仅剩11个月):2026奇点大会强制TEE接入新规解读,3类企业必须在Q3前完成可信推理栈升级
更多请点击: https://intelliparadigm.com 第一章:AI原生可信执行环境:2026奇点智能技术大会TEE for AI 在2026奇点智能技术大会上,TEE for AI(AI-Native Trusted Execution Environment)正式成为下一代A…...
爱普生SG-8201CJ石英可编程振荡器:精准频率控制专家首选
在电子设计中,晶振的选择往往是决定系统性能的关键因素之一。特别是在需要高精度和稳定性的应用中,选择一款合适的晶振尤为重要。今天,我们就来聊聊爱普生(Epson)的SG-8201CJ石英可编程振荡器,看看它如何成…...
H3C交换机三层组网配置保姆级复盘:从拓扑设计到排错命令一条龙
H3C交换机三层组网实战指南:从规划到排错的完整工作流 当企业网络规模逐渐扩大,部门间的隔离与互通需求变得复杂时,二层交换网络往往显得力不从心。这时,三层交换技术的引入就成为网络工程师的必修课。本文将带你深入一个真实的办…...
SignalTap调试进阶:巧用约束与别名捕获FPGA优化后的关键信号
1. 为什么优化后的信号会"消失"? 很多FPGA工程师都遇到过这样的场景:明明在代码里明确定义了reg和wire信号,但在SignalTap里死活找不到它们的身影。这其实不是工具出了问题,而是Quartus的综合优化在"作怪"。…...
保姆级教程:SAP S/4HANA数据迁移,用LTMC从零导入会计科目(附模板避坑指南)
SAP S/4HANA会计科目迁移实战:LTMC工具全流程详解与避坑手册 当企业首次部署SAP S/4HANA时,会计科目主数据的迁移往往是财务模块实施的关键第一步。不同于传统ECC系统,S/4HANA的简化数据模型对会计科目结构提出了新要求,而Migrati…...
高版本MATLAB机器人工具箱plot/teach视图兼容性修复实战
1. 问题现象与背景分析 最近在MATLAB 2019b上使用机器人工具箱(Robotics Toolbox)时遇到了一个奇怪的问题。当我像往常一样调用robot.plot()或者robot.teach()函数时,控制台突然报错:"索引超出数组元素数目(4)"。这个错…...
神经渲染新范式:体素网格技术全解析与实战指南
神经渲染新范式:体素网格技术全解析与实战指南 引言 在追求极致真实感与实时交互的3D数字世界中,神经渲染技术正掀起一场革命。其中,神经体素网格作为神经辐射场(NeRF)与显式体素表示融合的产物,以其在高…...
基于AI智能体群组的网站自动化测试:原理、配置与实战
1. 项目概述:用AI智能体群组自动化测试你的网站 最近在折腾一个本地开发的项目,前端页面越做越复杂,每次手动点点点测试UI、检查链接、看看响应式布局,实在是费时费力。直到我发现了 browser-use/vibetest-use 这个项目&#x…...
