【Spark精讲】一文讲透Spark宽窄依赖的区别

宽依赖窄依赖的区别

  • 窄依赖:RDD 之间分区是一一对应的
  • 宽依赖:发生shuffle,多对多的关系
    • 宽依赖是子RDD的一个分区依赖了父RDD的多个分区
    • 父RDD的一个分区的数据,分别流入到子RDD的不同分区
    • 特例:cartesian算子对应的CartesianRDD,是通过创建了两个 NarrowDependency 完成了笛卡尔乘积操作,属于窄依赖。

窄依赖

搜索源码,RangeDependency只有UnionRDD使用到了

val rdd1 = sc.parallelize(List(("a",1),("b",2)))
rdd1.partitions.size
//val res4: Int = 2
val rdd2 = sc.parallelize(List(("c",3),("d",4),("a",1)))
rdd2.partitions.size
//val res5: Int = 2
val rdd3 = rdd1.union(rdd2)
//val rdd3: org.apache.spark.rdd.RDD[(String, Int)] = UnionRDD[3] at union at <console>:1
rdd3.partitions.size
//val res7: Int = 4
rdd3.foreach(print)
//输出结果为:(a,1)(b,2)(c,3)(d,4)(a,1)

宽依赖

情况一

举例:cogroup算子、join算子

功能:将两个RDD中键值对的形式元素,按照相同的key,连接而成,只是将两个在类型为(K,V)和(K,W)的 RDD ,返回一个(K,(Iterable<V>,Iterable<W>))类型的 RDD

//cogroup	
val rdd1 = sc.parallelize(List(("a",1),("b",2)))
rdd1.partitions.size
//val res4: Int = 2
val rdd2 = sc.parallelize(List(("c",3),("d",4),("a",1)))
rdd2.partitions.size
//val res5: Int = 2
val newRDD = rdd1.cogroup(rdd2)
//val newRDD: org.apache.spark.rdd.RDD[(String, (Iterable[Int], Iterable[Int]))] = MapPartitionsRDD[8] at cogroup at <console>:1
newRDD.foreach(println)
//(a,(Seq(1),Seq(1)))
//(c,(Seq(),Seq(3)))
//(d,(Seq(),Seq(4)))
//(b,(Seq(2),Seq()))//join
val join = rdd1.join(rdd2)
//val join: org.apache.spark.rdd.RDD[(String, (Int, Int))] = MapPartitionsRDD[11] at join at <console>:1
join.foreach(println)
//(a,(1,1))

情况二

举例:groupByKey算子、reduceByKey算子

//groupByKey
val rdd = sc.parallelize(List(("a",1),("b",2),("a",1),("b",2)))
val groupRdd = rdd1.groupByKey()
//val groupRdd: org.apache.spark.rdd.RDD[(String, Iterable[Int])] = ShuffledRDD[16] at groupByKey at <console>:1
groupRdd.foreach(println)
//(b,Seq(2, 2))
//(a,Seq(1, 1))//reduceByKey
val reduceRdd = rdd.reduceByKey(_+_)
//val reduceRdd: org.apache.spark.rdd.RDD[(String, Int)] = ShuffledRDD[18] at reduceByKey at <console>:1
reduceRdd.foreach(println)
//(a,2)
//(b,4)

特例:cartesian算子

val rdd1 = sc.parallelize(List(("a",1),("b",2)))
rdd1.partitions.size
//val res4: Int = 2
val rdd2 = sc.parallelize(List(("c",3),("d",4),("a",1)))
rdd2.partitions.size
//val res5: Int = 2
val cartesianRdd = rdd1.cartesian(rdd2)
//val cartesianRdd: org.apache.spark.rdd.RDD[((String, Int), (String, Int))] = CartesianRDD[20] at cartesian at <console>:1
cartesianRdd.partitions.size
//val res24: Int = 4
cartesianRdd.foreach(println)
//((a,1),(c,3))
//((b,2),(c,3))
//((a,1),(d,4))
//((a,1),(a,1))
//((b,2),(d,4))
//((b,2),(a,1))

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

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

相关文章

【javaweb】tomcat9.0中的HttpServlet

2023年12月28日&#xff0c;周四晚上 目录 什么是HttpServlet tomcat中的HttpServlet由谁产生 什么是HttpServlet 在Tomcat中&#xff0c;HttpServlet 是 Java Servlet API 中的一个抽象类&#xff0c;用于简化基于HTTP协议的Servlet的开发。HttpServlet 扩展了 GenericServ…

Make 起步

文章目录 构建的定义Make 是什么Make 使用Makefile 文件规则Makefile 语法 构建的定义 代码变成可执行文件&#xff0c;叫做编译&#xff08;compile&#xff09;先编译这个文件&#xff0c;然后编译那个文件&#xff08;即编译的安排&#xff09;&#xff0c;叫做构建&#x…

项目引入本地jar包后,maven无法打包

目录 一、场景二、解决 一、场景 1、项目引入本地jar包 2、引入本地jar包后项目编译正常 3、maven打包时报错 二、解决 在pom.xml的plugins添加以下配置 <plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin&…

Ubuntu Desktop 22.04 桌面主题配置

Ubuntu Desktop 22.04 桌面主题配置 使用这么久 Ubuntu Desktop&#xff0c;本着不折腾的原则&#xff0c;简单介绍下自己的桌面主题配置。 安装 tweaks 安装 GNOME Shell 安装 GNOME theme安装 gnome-tweaks & chrome-gnome-shell sudo apt update # 安装 gnome-tweaks…

数据清洗与融合期末考试(常见理论题)

题库来源未知&#xff0c;大家有的话&#xff0c;也可以发给我&#xff0c;继续补充&#xff0c;答案不一定全部得分&#xff0c;但有借鉴价值 题库会不断扩充&#xff0c;答案会不断完善。 近几年的新冠疫情中&#xff0c;大数据发挥了重要的作用&#xff0c;通过大数据进行数…

android 手机主界面侧滑退出app问题

最近重新搭了个app&#xff0c;发现手机显示APP主界面时&#xff0c;沿着手机右边向左滑&#xff0c;会直接关闭应用&#xff0c;所以想搞个第一次提示&#xff0c;第二次退出app的效果。 结果搞出个复杂的东西&#xff0c;下面是两段代码。1: 1:GestureDetector扩展函数。其…

音频修复和增强软件:iZotope RX 10 (Win/Mac)中文汉化版

iZotope RX 是一款专业的音频修复和增强软件&#xff0c;一直是电影和电视节目中使用的行业标准音频修复工具&#xff0c;iZotope能够帮助用户对音频进行制作、后期合成处理、混音以及对损坏的音频进行修复&#xff0c;再解锁更多功能之后还能够对电影、游戏、电视之中的音频进…

最长的指定瑕疵度的元音子串 (100%用例)C卷 (JavaPythonNode.jsC语言C++)

开头和结尾都是元音字母(aeiouAEIOU)的字符串为 元音字符串 ,其中混杂的非元音字母数量为其 瑕疵度 。比如 : “ a ” 、 “ aa ”是元音字符串,其瑕疵度都为 0 “ aiur ”不是元音字符串(结尾不是元音字符) “ abira ”是元音字符串,其瑕…

限制用户只能访问特定的域名,域名白名单

目前最好的方案: 使用路由的 DNSmasq 解析设置白名单 此方案对安卓无效(安卓设置了dns,在解析失败后估计还会尝试内部默认dns) 此方案需要在pc端设置dns,并且使用非管理员帐号登录(非管理员帐号没有权限修改网络连接配置) (1)DNSmasq 是很多智能路由器自带的dns服务器,DNSm…

【Delphi 基础知识 3】每个单元的功能

目录 Winapi.Windows:System.SysUtils:System.Variants:System.Classes:Vcl.Graphics:Vcl.Controls:Vcl.Forms:Vcl.Dialogs: 在Delphi中&#xff0c;这些单元是用来提供各种功能和服务的单元&#xff08;units&#xff09;。下面是对每个单元的简要解释&#xff1a; Winapi.Wi…

Mac电脑CMake安装和配置

1.从CMake官网下载dmg文件并且安装 ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/a43f1462b5f743b4ba0bf5302ee76066.png)

Redis3.2.5哨兵模式搭建和mongodb3.2.5 主从复制模式搭建

文章目录 Redis3.2.5哨兵模式搭建服务器:一,服务器10.251.40.10执行下面操作:二,服务器10.251.40.11执行下面操作:三,服务器10.251.40.12执行下面操作:四,依次启动三台服务器的redis服务五,依次启动三台服务器的redis哨兵mongodb3.2.5 主从复杂模式安装服务器:一,服…

ASM GaN: 行业硅基氮化镓射频和功率设备标准模型—第一部分:直流、CV和射频模型

来源&#xff1a;ASM GaN: Industry Standard Model for GaN RF and Power Devices—Part 1: DC, CV, and RF Model (IEEE TRANSACTIONS ON ELECTRON DEVICES) 19年 摘要 本文介绍了GaN&#xff08;氮化镓&#xff09;HEMT&#xff08;高电子迁移率晶体管&#xff09;的先进S…

Redis使用中的常见问题及解决方案

在 Java Web 开发中,使用 Redis 作为缓存解决方案可以显著提高应用程序的性能和响应速度。然而,在实际使用过程中,开发者可能会遇到一些常见问题。以下是一些基于 Redis 的缓存问题及其解决方案: 1. 缓存穿透 问题: 缓存穿透是指查询不存在的数据,导致请求直接打到数据库…

vue3面试题

1. Vue 3 中的 Composition API 是什么&#xff1f;它与 Options API 有什么区别&#xff1f; 答案&#xff1a;Vue 3 中引入了 Composition API&#xff0c;它是一种基于函数的 API 风格&#xff0c;用于更灵活地组织和重用组件逻辑。与 Options API 相比&#xff0c;Composi…

利用动态规划法、中心扩展法解决回文子串

利用动态规划法、中心扩展法解决回文子串 动态规划法&#xff1a;1.确定dp[][]&#xff0c;对角线是true(因为单个字母为回文串) 2.枚举子串长度&#xff0c;从底至右上角填完表格 3.当Si!Sj时&#xff0c;false&#xff0c;当SiSj时&#xff0c;当最多3个字母为true&#xf…

【C语言】数据结构——排序(一)

&#x1f497;个人主页&#x1f497; ⭐个人专栏——数据结构学习⭐ &#x1f4ab;点击关注&#x1f929;一起学习C语言&#x1f4af;&#x1f4ab; 目录 导读&#xff1a;数组打印与交换1. 插入排序1.1 直接插入排序1.1.1 基本思想1.1.2 实现代码1.1.3 图解 1.2 希尔排序1.2.1…

github和gitee上比较有影响力的python爬虫项目

以下是 GitHub 上一些有影响力的 Python 网络爬虫项目:Scrapy :一个快速的、高级的 Python 网络爬虫与网页抓取框架​​。Botasaurus :被描述为一个全能的网络爬虫框架​Botasaurus ​。Everything Web Scraping :David Teather 在 YouTube 上教授网络爬虫的项目,适合学习…

H266/VVC量化编码技术概述

量化 量化&#xff1a; 是将信号的连续取值&#xff08;或大量可能的离散取值&#xff09;映射为有限多个离散幅值的过程&#xff0c;实现信号取值多对一的映射。在视频编码中&#xff0c;残差信号经过变换之后&#xff0c;变换系数往往具有较大的动态范围。因此&#xff0c;对…

中央集成式架构量产时代,openVOC方案将引发软件开发模式变革

2024年&#xff0c;中央计算区域控制架构正式进入规模化量产周期&#xff0c;汽车智能化正式迈入2.0时代&#xff0c;产业生态、应用创新、开发模式都将迎来巨大变革。 同时&#xff0c;随着ChatGPT引发的AIGC领域的爆发式增长&#xff0c;人工智能技术掀起全球万亿级信息化应…