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,一经查实,立即删除!

相关文章

应用弹窗优先级

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

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

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

训练模型为什么数据量大了效果却越来越差了

在使用卷积神经网络(CNN)训练识别模型时,如果随着数据量的增加,模型的效果却越来越差,可能涉及多个因素。以下是一些可能导致这种情况的原因: 数据质量问题:虽然数据量增加了,但如果…

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();}…

Idea可以运行Python!

Idea可以运行Python&#xff01; 以下这篇文章为基础教程&#xff1a; idea编写运行python_idea创建python项目-CSDN博客

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

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

蓝牙模块怎么使用?一篇全面指南!

一、引言   在这个数字化时代&#xff0c;蓝牙模块已经渗透到了我们日常生活的方方面面。它为各种设备提供了无线连接的可能性&#xff0c;极大地增强了我们的便利性和效率。那么&#xff0c;蓝牙模块怎么使用呢&#xff1f;本文将为你提供一份详细指南。   二、基础知识  …

【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安卓调用摄像头拍照确保打…

Python基础学习笔记(九)——字符串(下)

目录 前言一、字符串的编码、检测和比较1. 编码与解码2. 字符检测与判断3. 字符串的比较 二、占位符与格式化1. %型格式化2. {}型格式化3. 浮点格式化4. f-string 格式化4.1 对象调用4.2 数字格式4.3 字符串格式4.4 功能增强 三、字符驻留机制 前言 本篇将更深入地介绍字符串的…

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

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

Linux完整版命令大全(十三)

git(gnu interactive tools) 功能说明&#xff1a;文字模式下的文件管理员。 语  法&#xff1a;git补充说明&#xff1a;git是用来管理文件的程序&#xff0c;它十分类似DOS下的Norton Commander&#xff0c;具有互动式操作界面。它的操作方法和Norton Commander几乎一样&a…

重生之 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…