Spark---RDD依赖关系

文章目录

      • 1.1 RDD依赖关系
      • 1.2 血缘关系
      • 1.3 依赖关系分类
        • 1.3.1 窄依赖
        • 1.3.2 宽依赖
      • 1.4 RDD阶段划分和任务划分
        • 1.4.1 RDD阶段划分
        • 1.4.2 RDD任务划分

1.1 RDD依赖关系

在这里插入图片描述
在Spark中,一个RDD的形成依赖于另一个RDD,则称这两个RDD具有依赖关系(一般指相邻的两个RDD之间的关系) ,RDD的依赖关系对于优化Spark应用程序的性能和可靠性非常重要。通过合理地设计RDD的转换和动作操作,可以避免不必要的Shuffle操作,提高计算效率。

    //读取数据val lines:RDD[String] = context.textFile("D:\\learnSoftWare\\IdeaProject\\Spark_Demo\\Spark_Core\\src\\main\\com.mao\\datas\\1.txt")//执行扁平化操作val words : RDD[String] = lines.flatMap((a: String) => a.split(" "))

words的形成依赖于lines,这两个RDD之间就有依赖关系

1.2 血缘关系

依赖关系是对于相邻的两个RDD来说的,如果多个RDD之间存在依赖关系,则称它们之间具有血缘关系。
血缘关系在Spark中起着重要的作用。血缘关系记录了RDD的元数据信息和转换行为,主要用于容错和优化。
由于RDD中是不存储数据的,当计算发生错误的时候,很难重新计算丢失的数据分区。通过记录RDD的血缘关系,Spark可以在数据分区丢失时重新读取数据源并进行计算,从而恢复丢失的数据分区。 这样,即使在处理大规模数据集时,也能保证Spark作业的可靠性和稳定性。
其次,血缘关系还有助于Spark优化查询计划和性能。

    //执行业务操作val lines:RDD[String] = context.textFile("D:\\learnSoftWare\\IdeaProject\\Spark_Demo\\Spark_Core\\src\\main\\com.mao\\datas\\1.txt")//执行扁平化操作//扁平化就是将多个集合打散为一个集合val words: RDD[String] = lines.flatMap((a: String) => a.split(" "))val wordGroup: RDD[(String, Iterable[String])] = words.groupBy((word: String) => word)//对分组后的单词进行转换(hello,1)val wordToCount: RDD[(String, Int)] = wordGroup.map({case (word, list) => {(word, list.size)}})

如上述代码所示,words的形成依赖于lines,wordGroup依赖于words,wordToCount依赖于wordGroup。这些RDD之间就形成了血缘关系。

1.3 依赖关系分类

在Spark中的依赖关系,可以分为窄依赖和宽依赖(也称shuffle依赖)

1.3.1 窄依赖

窄依赖表示每一个父(上游)RDD 的 Partition 最多被子(下游)RDD 的一个 Partition 使用,窄依赖我们形象的比喻为独生子女。

在这里插入图片描述
一个新的分区的数据依赖于一个旧的分区的数据,这样的依赖称之为OneToOne依赖,即窄依赖

1.3.2 宽依赖

宽依赖表示同一个父(上游)RDD 的 Partition 被多个子(下游)RDD 的 Partition 依赖,会引起 Shuffle,总结:宽依赖我们形象的比喻为多生。
在这里插入图片描述
新的分区的数据依赖于多个旧的分区的数据,因为数据会被shuffle,所以宽依赖也被称为shuffle依赖。

1.4 RDD阶段划分和任务划分

1.4.1 RDD阶段划分

RDD(弹性分布式数据集)的阶段划分是在Spark中执行多个RDD时,根据RDD之间的依赖关系进行的。
通过分析各个RDD的依赖关系,可以生成一个依赖图(DAG,有向无环图)。然后,通过分析各个RDD中的分区之间的依赖关系,可以决定如何划分阶段。

Shuffle操作需要在不同的阶段之间进行,因此Spark会根据shuffle依赖关系将数据处理划分为不同的阶段。

DAG(Directed Acyclic Graph)有向无环图是由点和线组成的拓扑图形,该图形具有方向,不会闭环。 例如,DAG 记录了 RDD 的转换过程和任务的阶段。
在这里插入图片描述

具体的划分方法如下:

1.对DAG进行反向解析,遇到宽依赖(ShuffleDependency)就断开,遇到窄依赖就把当前的RDD加入到当前的阶段中。
2.将窄依赖尽量划分在同一个阶段中,这样可以实现流水线计算。
3.一个阶段等于宽依赖(ShuffleDependency)的个数加1。
4.一个阶段中的最后一个RDD的分区个数就是Task的个数。
简而言之,RDD的阶段划分就是在遇到宽依赖时划分出一个新的阶段,每个阶段的任务全部完成,每个分区元素准备就绪后才能进入下一个阶段。

划分出来的阶段的数量=shuffle依赖数量+1

1.4.2 RDD任务划分

RDD 任务切分中间分为:Application、Job、Stage 和 Task
⚫ Application:初始化一个 SparkContext 即生成一个 Application;
⚫ Job:一个 Action 算子就会生成一个 Job;
⚫ Stage:Stage 等于宽依赖(ShuffleDependency)的个数加 1;
⚫ Task:一个 Stage 阶段中,最后一个 RDD 的分区个数就是 Task 的个数。
注意:Application->Job->Stage->Task 每一层都是 1 对 n 的关系。

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

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

相关文章

创始人记|2023「年终总结」暨 WorkfineV6版本发布

大家好,我是Workfine黄坤,很高兴能够再次为大家进行分享。衷心感谢大家一直以来对我们的厚爱和支持。新的一年,祝愿大家财源滚滚,身体健康,阖家幸福。 这是我们创业的第七个年头,进入这一行也有整整十年。…

GO自研微服务框架-中间件

一.中间件 中间件的作用是给应用添加一些额外的功能,但是并不会影响原有应用的编码方式,想用的时候直接添加,不想用可以很轻松的去除,做到所谓的可插拔。 中间件的实现位置在哪里? 不能耦合在用户的代码中需要独立存…

减肥或者运动真的能改变面相吗?

减肥或运动真的能改变面相吗? 在我们日常生活中,经常可以听到一些关于面相的说法,比如“胖的人更有福气”、“瘦的人更有灵气”等等。那么,减肥或运动是否真的能够改变一个人的面相呢?下面我们就来探讨一下这个问题。…

高精度磁导航传感器MGS系列RS232|RS485|CANBUS通讯连线方法

高精度磁导航传感器MGS系列,包含:CNS-MGS-080N、CNS-MGS-160N等,具有1mm的检测精度,特别适应于⾼精度磁条导航。利⽤检测磁场相对位置来进⾏AGV的辅助定位对接,获得更⾼的导航、定位、驻⻋精度。 MGS系列磁导航传感器⽀…

多臂老虎机 “Multi-armed Bandits”

将强化学习与机器学习、深度学习区分开的最重要的特征为:它通过训练中信息来评估所采取的动作,而不是给出正确的动作进行指导,这极大地促进了寻找更优动作的需求。 1、多臂老虎机(Multi-armed Bandits)问题 赌场的老虎…

阿里云服务器选哪个好(各自的优势区别)

阿里云服务器该怎么选? 一:99元一年,每天花费0.27元 点击 实惠好用,祝从此链接购买的用户天天好事不断! 1.想省点钱的个人开发者建议选经济型e实例(2核2G,3M网络带宽,40G云盘) 2.可以用来干什么? 搭建中小…

系统语言德语时浮点数转化问题

原因 游戏上线后,玩家反馈系统语言为德语时会有问题,经排查测试,发现是德语的浮点数转化,也就是float.parser对于德语来说会有问题。 在中国和英国,表示小数是用 小数点,即:0.123。但是在德国…

2024 极术通讯-“周易”NPU与飞桨完成II 级兼容性测试,助力实现多样化AI部署

导读:极术社区推出极术通讯,引入行业媒体和技术社区、咨询机构优质内容,定期分享产业技术趋势与市场应用热点。 芯方向 Helium 技术讲堂 | 循环缓冲区的使用 当人工智能 (AI) 下沉到各式各样的应用当中,作为市场上最大量的物联网…

聚酰亚胺PI的特性有哪些?UV胶水能够粘接聚酰亚胺PI吗?又有哪些优势呢?

聚酰亚胺(Polyimide,PI)是一种高性能的聚合物材料,具有许多优异的特性。以下是聚酰亚胺的主要特性: 1. 高耐热性:聚酰亚胺的玻璃化转变温度和熔点都很高,可在非常高的温度下工作,其长…

Python 获取ResponseContent的文件名

通过网络请求下载的文件,有些时候不想重命名可以直接使用网页所返回的文件名 需要用到两个库 uuid 负责生成随机的数 unquote 负责解析编码后的字符 分了两种情况进行处理 1.找得到header 里面文件名 直接使用文件所返回的文件名 2.找不到header里面的文件…

leecode2719 | 统计整数数目

给你两个数字字符串 num1 和 num2 &#xff0c;以及两个整数 max_sum 和 min_sum 。如果一个整数 x 满足以下条件&#xff0c;我们称它是一个好整数&#xff1a; num1 < x < num2 min_sum < digit_sum(x) < max_sum. 请你返回好整数的数目。答案可能很大&#xff0…

极智芯 | 解读自动驾驶芯片之高通骁龙Ride系列

欢迎关注我的公众号「极智视界」,获取我的更多技术分享 大家好,我是极智视界,本文分享一下 解读自动驾驶芯片之高通骁龙Ride系列。 邀您加入我的知识星球「极智视界」,星球内有超多好玩的项目实战源码和资源下载,链接:https://t.zsxq.com/0aiNxERDq 对于自动驾驶芯片,之…

抖音弹幕玩法汉字找不同让鼠标指针自动漂浮的实现原理及代码

如下图&#xff0c;抖音直播间弹幕互动玩法&#xff0c;为了增强用户的视觉感知体验&#xff0c;在里面加了一个鼠标&#xff0c;来让用户感知到自己在操作。下一节我们将背景音乐也给加上去。 我们实现的方案是用anime.js动画&#xff0c;来让一个图片在指定区域范围内随机漂浮…

PDF文件中字体乱码的一种简单的处理方法

要解决问题先得碰到问题&#xff0c;碰到问题就迈出了解决问题的关键一步。 问题PDF文件的下载链接 这文件用Acrobat打开&#xff0c;无法搜索文本&#xff0c;复制文本出来也都是乱码。但用sumatra PDF打开就不存在这个问题&#xff01; 用Acrobat的印前检查解决。prefligh…

解决kubelet报failed to get imageFs info: non-existent label \“docker-images\“

问题&#xff1a; 一环境主机重启后&#xff0c;查看kubelet日志经常有大量无法回收镜像文件报错&#xff0c;会导致kubelet的pleg不健康&#xff0c;从而导致kubelet发生重启。报错如下&#xff1a; 解决办法 解决方法一&#xff1a; systemctl stop docker systemctl stop …

解锁Python神器vars:让你的代码瞬间脱颖而出!

vars()函数是一个内置函数&#xff0c;用于返回对象的__字典__&#xff0c;其中包含对象的__属性__。它适用于模块、类和实例对象&#xff0c;为你提供了访问对象属性的便捷方式。 1. vars() 函数概述 vars()函数有两种使用方式&#xff1a; 不带参数&#xff1a;返回当前作…

<软考高项备考>《论文专题 - 69 风险管理(1) 》

1 论文基础 1.1 写作要点 过程定义、作用写作要点、思路规划风险管理是定义如何实施项目风险管理活动的过程。作用:确保风险管理的水平、方法和可见度与项目风险程度相匹配&#xff0c;与对组织和其他干系人的重要程度相匹配。风险管理计划的内容、编写原则。结合风险管理计划…

20240104金融读报1分钟小得

数字技术引领将是补齐金融机构在普惠金融服务质量、效率等方面短板的有效方式 从省农担的名单制管理-》整村担保&#xff08;整个村子都担保&#xff0c;具体售给谁由银行决定&#xff09;

SAP不同语言开发

文章目录 1 Please write English Nmae2 go to goto menu and translation3 Write your target language .4 Please input Chinese5 Summary 1 Please write English Nmae 2 go to goto menu and translation 3 Write your target language . 4 Please input Chinese 5 Summary…

LeetCode——2085. 统计出现过一次的公共字符串

通过万岁&#xff01;&#xff01;&#xff01; 题目&#xff1a;给你两个字符串数组&#xff0c;然后让你统计字符串数组中&#xff0c;出现过分别只出现过一次的字符串的个数。思路&#xff1a;直接两个map&#xff0c;用于分别统计每个字符串数组中字符出现的次数。然后遍历…