Spark中的累加器与广播变量及blockmanager图解

一、累加器

1、累加器的引入

        案例:没读取一条文件中的数据,count+1,并打印在Drive端(控制台)

import org.apache.spark.{SparkConf, SparkContext}
import org.apache.spark.rdd.RDDobject Demo20Accumulator {def main(args: Array[String]): Unit = {val conf = new SparkConf()conf.setMaster("local").setAppName("累加器的引入")val context = new SparkContext(conf)val studentRDD: RDD[String] = context.textFile("spark/data/student.csv")var count = 0studentRDD.foreach((line:String)=>{count+=1println("-------------------------")println(count)                       //打印1~1000println("-------------------------")})println(s"count的值为:${count}")       //count的值为:0}
}

累加器的引入代码图解:

 

2、累加器的应用

object Demo20Accumulator {def main(args: Array[String]): Unit = {val conf = new SparkConf()conf.setMaster("local").setAppName("累加器的应用")val context = new SparkContext(conf)val studentRDD: RDD[String] = context.textFile("spark/data/student.csv")/*** 累加器:由SparkContext来创建* 注意:* 1、累加器能保证在Spark任务出现问题被重启的时候不会出现重复计算. * 2、累加器只有在Action算子执行的时候才会被触发.*/val accumulator: LongAccumulator = context.longAccumulatorstudentRDD.foreach((line: String) => {accumulator.add(1)})println(s"accumulator的值为:${accumulator.value}")    //accumulator的值为:1000}
}

累加器的应用代码图解:

二、广播变量

1、广播变量的引入

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}import scala.io.Sourceobject Demo21Broadcast {def main(args: Array[String]): Unit = {val conf = new SparkConf()conf.setMaster("local")conf.setAppName("广播变量引入演示")val context = new SparkContext(conf)//使用Scala的方式读取学生数据文件,将其转换以学号作为键的map集合,属于在Driver端的一个变量val studentsMap: Map[String, String] = Source.fromFile("spark/data/student.csv").getLines().toList.map((line: String) => {val infos: Array[String] = line.split(",")val stuInfo: String = infos.mkString(",")infos(0) -> stuInfo}).toMapval scoresRDD: RDD[String] = context.textFile("spark/data/score.txt")/*** 将Spark读取的分数RDD与外部变量学生Map集合进行关联* 循环遍历scoresRDD,将学号一样的学生信息关联起来*/val resMapRDD: RDD[(String, String)] = scoresRDD.map((score: String) => {val id: String = score.split(",")(0)//使用学号到学生map集合中获取学生信息val studentInfo: String = studentsMap.getOrElse(id, "无学生信息")score -> studentInfo})resMapRDD.foreach(println)}
}

广播变量的引入代码图解:

2、广播变量的应用

import org.apache.spark.broadcast.Broadcast
import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}import scala.io.Sourceobject Demo21Broadcast {def main(args: Array[String]): Unit = {val conf = new SparkConf()conf.setMaster("local")conf.setAppName("广播变量应用演示")val context = new SparkContext(conf)//使用Scala的方式读取学生数据文件,将其转换以学号作为键的map集合,属于在Driver端的一个变量val studentsMap: Map[String, String] = Source.fromFile("spark/data/student.csv").getLines().toList.map((line: String) => {val infos: Array[String] = line.split(",")val stuInfo: String = infos.mkString(",")infos(0) -> stuInfo}).toMap/*** 将studentsMap变成一个广播变量,让每一个将来需要执行关联的Executor中都有一份studentsMap数据* 避免了每次Task任务拉取都要附带一个副本,拉取的速度变快了,执行速度也就变快了**/val studentsMapBroadcast: Broadcast[Map[String, String]] = context.broadcast(studentsMap)val scoresRDD: RDD[String] = context.textFile("spark/data/score.txt")/*** 使用广播变量进行关联*/val resMapRDD: RDD[(String, String)] = scoresRDD.map((score: String) => {val id: String = score.split(",")(0)val stuMap: Map[String, String] = studentsMapBroadcast.value     //获取广播变量中的值//使用学号到学生map集合中获取学生信息val studentInfo: String = stuMap.getOrElse(id, "无学生信息")(score, studentInfo)})resMapRDD.foreach(println)}
}

广播变量的应用代码图解:

三、blockmanager  

          在广播变量的应用代码图解中提到了blockmanager拉取Driver端的数据,在此详细说明一下blockmanager,blockmanager是Executor的组成部分之一,它负责管理内存和磁盘上的数据块。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/18703.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

应用弹窗优先级

背景 由于活动业务越来越多,积累的弹窗越来越多和杂乱,出现如下弹窗交互问题: 弹窗无限重叠,影响操作 弹出顺序无优先级,重要弹窗被隐藏 原因相信大家都一样,产品是一次次迭代的,也可能是不同人开发的,两个毫不相关的业务,弹窗时机也没有任何关联,重不重叠我怎么控制…

有效运营企业内部社区的板块有哪些?

随着企业内部沟通和协作的重要性日益凸显,建立一个高效运营的企业内部社区成为越来越多企业的首要任务。针对不同的需求和目标,将企业内部社区分为多个板块,可以更好地促进员工之间的沟通、协作和共享知识。下面介绍如何从分多个板块创建的角…

SQL注入攻击是什么?如何预防?

一、SQL注入攻击是什么? SQL注入攻击是一种利用Web应用程序中的安全漏洞,将恶意的SQL代码插入到数据库查询中的攻击方式。攻击者通过在Web应用程序的输入字段中插入恶意的SQL代码,然后在后台的数据库服务器上解析执行这些代码,从而…

定个小目标之每天刷LeetCode热题(3)

这是一道简单题&#xff0c;我这里就只讲两种解法 第一种是数组加双指针&#xff0c;先遍历链表将值存到数组里&#xff0c;然后分别从数组两端进行一一比较判断是否满足回文&#xff0c;代码实现 class Solution {public boolean isPalindrome(ListNode head) {List<Inte…

给想玩AIGC的小白:教你从0搭一个图文视频生成网站(附插件源码)

Stable Diffusion的发布是AI图像生成发展过程中的一个里程碑&#xff0c;相当于给大众提供了一个可用的高性能模型&#xff0c;让「AI 文本图片生成」变成普通人也能玩转的技术。最近一些网友将网上的真人图片不断喂给模型&#xff0c;让其自主学习&#xff0c;训练出来的效果已…

工业工程师日子越来越受不了?IE们都在做什么?

有一位工业工程师&#xff08;IE&#xff09;毕业在一家工厂工作&#xff0c;入职一年了&#xff0c;本科读的是工业工程&#xff0c;他说理想很美好现实很骨感&#xff0c;以为做和本科一样的职业就能够大展宏图&#xff0c;结果上司天天让他盯生产线&#xff0c;在厂房一站就…

基于jeecgboot-vue3的Flowable增加表单功能(三)

因为这个项目license问题无法开源&#xff0c;更多技术支持与服务请加入我的知识星球。 接上一节 10、新建表单&#xff0c;打开VForm3编辑页面 /*** 新增事件*/function handleAdd() {designer.open true;nextTick(() > {reset();vfDesignerRef.value.clearDesigner();}…

m1系列芯片aarch64架构使用docker-compose安装nacos

之前看到 DockerHub 上发布了 m1 芯片 aarch64 架构的 nacos 镜像, 所以就尝试的安装了下, 亲测可用: 一. docker-compose.yml 编写 请确保自己的 mysql 服务已经启动了, 并且允许远程连接 volumes 挂载目录需要换成自己的目录 二. 容器运行和网络组 2.1 查看容器运行情况 …

【ai】livekit服务本地开发模式及example app信令交互详细流程

文档要安装git lfs 下载当前最新版本1.6.1 windows版本&#xff1a;启动dev模式 服务器启动 (.venv) PS D:\XTRANS\pythonProject\LIVEKIT> cd .\livekit_release\ (.venv) PS D:\XTRANS\pythonProject\LIVEKIT\livekit_release> lsDirectory: D:\XTRANS\pythonProject\L…

css-表头筛选的特定样式

背景 饿了么的表头筛选样式比较简单&#xff0c;如图1&#xff0c;产品觉得不够醒目&#xff08;觉得用户可能不知道这是筛选&#xff0c;我表示不理解&#xff09; 要求改进筛选的样式&#xff0c;达到图2的效果&#xff0c;主要是状态列&#xff0c;既希望这列的宽度固定&a…

[UE5]安卓调用外置摄像头拍照(之显示画面)

目录 部分参考文献&#xff08;有些有用的我没标&#xff0c;没放上来&#xff09; 要点 总蓝图 结果 部分参考文献&#xff08;有些有用的我没标&#xff0c;没放上来&#xff09; 【UE】获取USB摄像头画面_虚幻捕获硬件摄像头-CSDN博客 UE4安卓调用摄像头拍照确保打…

高边坡监测常用的主要仪器设备

随着人类的发展&#xff0c;近几年由于人类生活生产的破坏&#xff0c;地球环境不断恶化。鉴于这一现象&#xff0c;监测行业也随之应运而生。常见的监测类型有&#xff1a;边坡监测&#xff0c;地灾监测&#xff0c;水库监测&#xff0c;大坝监测&#xff0c;矿山监测&#xf…

重生之 SpringBoot3 入门保姆级学习(01、Hello,SpringBoot3)

重生之 SpringBoot3 入门保姆级学习&#xff08;01、Hello&#xff0c;SpringBoot3&#xff09;&#xff09; 1、快速体验1.1 创建项目1.2 导入 SpringBoot3 依赖1.3 导入 SpringBoot3 Web 依赖1.4 代码编写1.5 浏览器测试 1、快速体验 场景&#xff1a;浏览器发送 /hello 请求…

Balabolka-一款完全免费的电子书朗读及文本转语音软件

下载地址&#xff1a;Balabolka Balabolka能够进行简单的文本转语音任务&#xff0c;支持各种语言包&#xff0c;该软件可以读取剪贴板的内容&#xff0c; 可以查看AZW&#xff0c;CHM&#xff0c;DjVu&#xff0c;DOC&#xff0c;EPUB&#xff0c;FB2&#xff0c;LIT&#xff…

Centos安装nvm管理node版本(让安装变得可控又快捷)

Centos安装nvm管理node版本&#xff08;让安装变得可控又快捷&#xff09; 没有找到一个对的人&#xff0c;有可能是你没有走对那条路&#xff0c;也有可能是你没有睁开眼睛&#xff0c;而更大的可能是&#xff0c;你根本就没有出发去找。 安装说明 nvm安装目录&#xff1a;/us…

PG TOAST技术

1.Toast简介&#xff1a; Toast是超长字段在PG的一个存储方式&#xff0c;对于用户来说不用关注这一技术的实现&#xff0c;完全是透明的&#xff0c;它会将大字段值压缩或分散为多个物理行来存储&#xff0c;与Oracle的CLOB&#xff0c;BLOB类似。 2.Toast的存储方式&#xf…

vscode: console.log快捷键设置

webstorm 编辑器自带一个 console.log 的快捷方式&#xff0c;即 .log 然后按回车键就可以了&#xff0c;但是webstorm 用着用着就得找解码&#xff0c;还是 vscode 好啊 那 vscode有类似的方法吗&#xff0c;答案是必然的 在VScode中打开文件 → 首选项 → 用户代码片段 → 在…

人工智能在乳腺癌领域的最新进展|【医学AI·文献速递·05-29】

小罗碎碎念 2024-05-29&#xff5c;文献速递 今天分享的文章&#xff0c;主题是AI乳腺癌。 第三篇文章&#xff0c;个人觉得是今天最有借鉴价值的——临床故事接地气&#xff0c;工科算法赶潮流。这篇文章主要做的事情是利用多模态多组学&#xff0c;去区分乳腺腺病和乳腺癌&a…

[Linux打怪升级之路]-进程和线程

前言 作者&#xff1a;小蜗牛向前冲 名言&#xff1a;我可以接受失败&#xff0c;但我不能接受放弃 如果觉的博主的文章还不错的话&#xff0c;还请点赞&#xff0c;收藏&#xff0c;关注&#x1f440;支持博主。如果发现有问题的地方欢迎❀大家在评论区指正 目录 一、进程 1…

玩转STM32-直接存储器DMA(详细-慢工出细活)

文章目录 一、DMA介绍1.1 DMA简介1.2 DMA结构 二、DMA相关寄存器&#xff08;了解&#xff09;三、DMA的工作过程&#xff08;掌握&#xff09;四、DMA应用实例4.1 DMA常用库函数4.2 实例程序 一、DMA介绍 1.1 DMA简介 DMA用来提供外设与外设之间、外设与存储器之间、存储器与…