Spark大数据处理讲课笔记-- 理解RDD依赖

news2025/1/12 3:55:59

零、本讲学习目标

  1. 理解RDD的窄依赖
  2. 理解RDD的宽依赖
  3. 了解两种依赖的区别

一、RDD依赖

  • 在Spark中,对RDD的每一次转化操作都会生成一个新的RDD,由于RDD的懒加载特性,新的RDD会依赖原有RDD,因此RDD之间存在类似流水线的前后依赖关系。这种依赖关系分为两种:窄依赖和宽依赖。

 

二、窄依赖

  • 窄依赖是指父RDD的每一个分区最多被一个子RDD的分区使用,即OneToOneDependencies。窄依赖的表现一般分为两类,第一类表现为一个父RDD的分区对应于一个子RDD的分区;第二类表现为多个父RDD的分区对应于一个子RDD的分区。一个父RDD的一个分区不可能对应一个子RDD的多个分区。为了便于理解,我们通常把窄依赖形象地比喻为独生子女。
  • RDD做map、filter和union算子操作时,是属于窄依赖的第一类表现;而RDD做join算子操作(对输入进行协同划分)时,是属于窄依赖表现的第二类。输入协同划分是指多个父RDD的某一个分区的所有Key,被划分到子RDD的同一分区。当子RDD做算子操作,因为某个分区操作失败导致数据丢失时,只需要重新对父RDD中对应的分区做算子操作即可恢复数据。

(一)map()与filter()算子

  • 一对一的依赖

 

(二)union()算子

  • 一对一的依赖

 

(三)join()算子

  • 一对一的依赖

 

  • 对于窄依赖的RDD,根据父RDD的分区进行流水线操作,即可计算出子RDD的分区数据,整个操作可以在集群的一个节点上执行。

三、宽依赖

  • 宽依赖是指子RDD的每一个分区都会使用所有父RDD的所有分区或多个分区,即OneToManyDependecies。为了便于理解,我们通常把宽依赖形象的比喻为超生。
  • 父RDD做groupByKey和join(输入未协同划分)算子操作时,子RDD的每一个分区都会依赖于所有父RDD的所有分区。当子RDD做算子操作,因为某个分区操作失败导致数据丢失时,则需要重新对父RDD中的所有分区进行算子操作才能恢复数据。
  • 例如,groupByKey()、reduceByKey()、sortByKey()等操作都会产生宽依赖。

(一)groupBy()算子

  • 多对多的依赖

 

(二)join()算子

  • 多对多的依赖

 

  • join()操作的依赖关系分两种情况:RDD的一个分区仅和另一个RDD中已知个数的分区进行组合,这种类型的join()操作是窄依赖,其他情况则是宽依赖。
  • 在宽依赖关系中,RDD会根据每条记录的key进行不同分区的数据聚集,数据聚集的过程称作Shuffle,类似MapReduce中的Shuffle过程。举个生活中的例子,4个人一起打牌,打完牌后需要进行洗牌,这4个人相当于4个分区,每个人手里的牌则相当于分区里的数据,洗牌的过程可以理解为Shuffle。因此,Shuffle其实就是不同分区之间的数据聚集或者说数据混洗。Shuffle是一项耗费资源的操作,因为它涉及磁盘I/O、数据序列化和网络I/O。

(三)reduceByKey()算子

  • 对一个RDD进行reduceByKey()操作,RDD中相同key的所有记录将进行聚合,而key相同的所有记录可能不在同一个分区中,甚至不在同一个节点上,但是该操作必须将这些记录聚集到一起进行计算才能保证结果准确,因此reduceByKey()操作会产生Shuffle,也会产生宽依赖。

三、两种依赖的比较

  • 在数据容错方面,窄依赖要优于宽依赖。当子RDD的某一个分区的数据丢失时,若是窄依赖,则只需重算和该分区对应的父RDD分区即可,而宽依赖需要重算父RDD的所有分区。在groupByKey()操作中,若RDD2的分区1丢失,则需要重新计算RDD1的所有分区(分区1、分区2、分区3)才能对其进行恢复。此外,宽依赖在进行Shuffle之前,需要计算好所有父分区的数据,若某个父分区的数据未计算完毕,则需要等待。
     

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

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

相关文章

CANFDCAN协议对比 - 基础介绍_02

目录 四、CAN和CANFD区别 1、保留位 2、FDF-FD格式 五、高速传输机制 1、位速率切换 (Bit Rate Switch) 2、波特率5MBit/s 3、BRS和CRC界定符之间采用更高的波特率 六、CANFD数据场 1、经典CAN中DLC:9种可能的长度 2、CANFD中DLC:16种可能的长…

ChatGPT你真的玩明白了?来试试国内免费版的ChatGPT吧!

文章目录 一、什么是ChatGPT二、ChatGPT的作用三、免费ChatGPT的使用四、写在最后 一、什么是ChatGPT ChatGPT全称为Chat Generative Pre-trained Transformer,Chat是聊天的意思,GPT是生成型预训练变换模型,可以翻译为聊天生成预训练转换器或…

抖音seo源码开发部署

抖音seo账号矩阵源码系统搭建,​ 抖音获客系统,抖音SEO优化系统源码开发,思路分享,分享一些开发的思路...... 账号矩阵霸屏系统源代码账号矩阵系统建设部署,短视频seo账号矩阵框架分析,开发语言为后台框架语言PHP pyt…

chatgpt赋能Python-python_nonetype报错

Python NoneType报错:原因、解决方法和预防措施 Python 是一种面向对象的高级编程语言,用于快速编写脚本和应用程序。但是,当我们在编写 Python 代码时,可能会遇到 NoneType 报错;这是一种类型错误,它发生…

接口自动化测试工具SoapUI下载安装以及简单使用教程

前言 SoapUI是Webservice开发的必备工具。SoapUI是一个开源测试工具,通过Soap/HTTP来检查、调用、实现Web Service的功能,而且还能对Webservice做性能方面的测试。SoapUI会根据WSDL的格式生成左边的列表树,双击Request1就能看到Soap请求报文的内容。 一…

笔记--大数据--大数据概念

大数据:指无法在一定时间范围内用常规软件工具进行捕捉、管理和 处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化 能力的海量、高增长率和多样化的信息资产。 按顺序给出数据存储单位:bit、Byte、KB、MB、GB、TB…

笔记--大数据--Hadoop--01--基础概念

Hadoop是什么 Hadoop是一个分布式系统基础架构 主要解决海量数据的存储和分析计算问题 Hadoop优势–4高 高可靠性:Hadoop底层维护多个数据版本,单个计算元素或存储故障也不会导致数据丢失 高扩展性:在集群中分配任务数据,可以方便…

springWEB搭建

SpringWEB就是spring框架里得一个模块 springMVC介绍 在之前的后端三大架构: Controller: 控制层, 包含了servlet, 对数据的接收, 处理, 响应 Model: 数据模型, dao, model VIew: 视图, jsp, 用于将数据添加到html中进行响应 工作流程: 主要是控制层接收到响应之后, 调取dao层将…

CodeForces.1806A .平面移动.[判断可达范围][找步数规律]

题目描述: 题目解读: 给定移动规则以及起始点,终点;分析终点是否可达,可达则输出最小步数。 解题思路: 首先要判定是否可达。画图可知,对于题目给定的移动规则,只能到达起始点(a,b…

行业常识_交换机

文章目录 一、前言二、交换机2.1 什么是交换机?2.2 交换机的作用是什么?2.3 交换机的应用2.4 交换机分类2.5 交换机功能2.6 交换机的带宽 三、总结 一、前言 项目中经常会用到交换机。 交换机有多个网口。 你可以用一根网线,网线一端插入交换…

【学习日记2023.5.23】 之 店铺营业状态模块完善

文章目录 5. 店铺营业状态设置5.1 需求分析和设计产品原型 5.2 代码开发5.2.1 设置营业状态5.2.2 管理端查询营业状态5.2.3 用户端查询营业状态 5.3 功能测试5.3.1 接口文档测试5.3.2 接口分组展示5.3.3 前后端联调测试5.4 代码提交 5. 店铺营业状态设置 5.1 需求分析和设计 产…

chatgpt赋能Python-python_os_remove

Python os.remove(): 删除文件 什么是 Python os.remove()? Python os.remove() 函数是 Python 中用于删除文件的标准库函数之一。 它使用以下语法: os.remove(file)这里的 file 参数是要删除的文件的路径及文件名。 Python os.remove()的工作原理 …

Linux——SNAT与DNAT的应用

一、SNAT的介绍 1,SNAT概述 SNAT(SNAT)一般指源地址转换 源地址转换是内网地址向外访问时,发起访问的内网ip地址转换为指定的ip地址(可指定具体的服务以及相应的端口或端口范围),这可以使内网中…

2024考研《数据结构》复习笔记总览(文末有彩蛋)

前言 数据结构是是计算机专业的必修课,也是计算机考研的必学书目。 随着科技的飞速发展,数据结构的基础性地位不仅没有动摇,反而由于近年来算法工程师的高薪火爆,使得数据结构的重视程序空前高涨。 索引目录 数据结构考研笔记第…

电动力学专题:天线阵简介

电动力学专题:天线阵天线阵是指由多个天线按一定方式组合而成的一个系统,用于接收或发射无线电信号。天线阵可用于雷达、通信、导航和定位等领域,能够大幅度提高系统的灵敏度和方向性,同时也能提高系统的抗干扰能力和分辨率。在实…

fastposter v2.15.0 从繁琐到简单,简洁好用的海报生成器

fastposter v2.15.0 从繁琐到简单,简洁好用的海报生成器 从繁琐到简单,简洁好用的海报生成器 我很高兴向大家推荐一款令人兴奋的工具——Fastposter海报生成器。作为一名开发者,我们深知在项目中创建专业级海报的重要性,但常常面…

MATLAB仿真建模:Simulink和Stateflow的应用和模型设计

第一章:引言 在当今的科学研究和工程领域中,仿真建模是一项非常重要的技术。通过仿真建模,我们可以在计算机上创建模拟真实系统行为的模型,并通过模型的分析和测试来优化系统设计。MATLAB是一种广泛应用于科学和工程领域的强大工…

FPGA——HLS入门-LED闪烁仿真

系列文章目录 文章目录 系列文章目录一、HLS介绍1、什么是HLS2、与VHDL/Verilog有什么关系?3、关键技术局限性 二、Vivado HLS - LED闪烁仿真1、项目配置2、C仿真3、联合仿真 三、总结 一、HLS介绍 1、什么是HLS HLS就是高综合(High level Synthesis)…

如何开发微信小程序,后端,前端,小程序端,如何部署到腾讯云托管

开发微信小程序是一项非常有趣的任务,它涉及到前端、后端和小程序端的开发。在本文中,我们将介绍如何开发微信小程序,并将其部署到腾讯云托管。 一、前端开发 前端开发是微信小程序开发的第一步。在这一步中,我们需要使用微信小程…

分享几个网内可用的免费的ChatGPT网页版

Chatgpt: 与AI聊天的新体验 随着数字生活的普及和人工智能技术的快速发展,越来越多人希望与机器进行真挚的交流,体验身临其境的感觉。基于这个想法,我们推出了Chatgpt,一款基于自然语言处理技术和深度学习算法的智能聊天机器人&a…