RDD算子---->coalesce和repartition的区别

1.coalesce()

作用:缩减分区数,用于大数据集过滤后,提高小数据集的执行效率。

需求:创建一个4个分区的RDD,对其缩减分区

#1.创建一个RDD
rdd1 = sc.parallelize(range(1,11),4)
#2.对RDD重新分区
rdd2 = rdd1.coalesce(2)
#3.打印
print("rdd1分区数", rdd1.getNumPartitions()) # 4
print("rdd2分区数", rdd2.getNumPartitions()) # 2list1 = rdd2.collect()
print(list1)

2.repartition()

作用:根据分区数,重新通过网络随机洗牌(shuffle)所有数据。

需求:创建一个4个分区的RDD,对其重新分区

from pyspark import SparkContext, SparkConfdef main():conf = SparkConf().setAppName("第一个Spark程序")sc = SparkContext(conf=conf)#1.创建一个RDDrdd1 = sc.parallelize(range(1,11),4)#2.重新分区rdd2 = rdd1.repartition(6)#3.打印print("rdd1分区数", rdd1.getNumPartitions()) #4print("rdd2分区数", rdd2.getNumPartitions()) #6list1 = rdd2.glom().collect()print(list1)if __name__ == '__main__':main()

3.总结:coalesce和repartition的区别

按住ctrl点击coalesce方法可以看到它的底层逻辑,我们可以看到,coalesce进行重新分区有两个参数,numPartitions和shuffle=False,通过传递参数可以选择是否进行shuffle过程。由参数shuffle: Boolean = false/true决定。

repartition实际上是调用的coalesce()方法返回的是coalesce(numPartitions,shuffle=True),默认是进行shuffle过程的

注意:通常情况下我们使用coalesce或者repartitions的时候不传递shuffle参数,这种情况下我们使用coalesce用来减少分区的个数,使用repartitions来增加分区的个数,但是并不代表coalesce只能减少分区,repartitions只能增加分区:解释过程如下:


        减少分区允许不进行shuffle过程,但是增大分区需要 (spark要求减少分区可以shuffle,也可以没有shuffle,增加分区必须shuffle)

所以coalesce可以在不进行shuffle的情况下减少分区,增大分区需要指定第二个参数为true

减少分区的应用场景:例如通过filter之后,有些分区数据量比较少,通过减少分区,防止数据倾斜

有一个RDD,数据量比较大,并且分区数也比较大。
经过filter过滤之后,数据量减少了很多,但是默认情况下分区数不变。
这个时候可以通过repartition算子改变分区。
经过filter、分组等操作之后,RDD各个分区的数量有倾斜,
通过repartition之后,可以保证各个分区的数量相同注意,在pyspark中,底层重分区是批量操作的,如果不需要,可以设置参数:sc._batchSize = 1

增大分区的应用场景:分区内数据量太大,通过增加分区提高并行度,减少输出的文件数量

拓展:

        我们新建一个rdd,数据量相比较于真正的企业开发肯定是小的可怜,使用二十多个数据吧,然后设置分区数量是4,经过filter过滤保留大于10的元素,输出之后发现,第一个分区内的数据为0,其他三个分区内的元素分布还是较为均匀的,此时发生了数据倾斜,我们就需要解决这个问题,首先我想到的是通过充分区的方式来处理

此时有趣的一幕出现了,我们想通过重分区来解决数据倾斜的问题,输出之后发现,,,数据更倾斜了,第三四分区的数据都没了,,,,这显然没有的达到我们的预期,出现这种结果的原因到底是什么,分区过程这个元素的分发是如何计算的,把我的三四分区数据都搞没了

点开代码发现,里面有一个batchSize变量,这个值好像有点用处,我不会,问一下chatgpt吧,解释说是用于确定批处理大小,self.ctx._batchSize这个值是可以设置的,默认值batchSize是10,所以在数据分发处理的时候,会10个10个的分数据到不同的分区,而我们测试用的数据很少,只有一二十个,经过filter过滤之后更少了,所以只分到了第一二分区,第三四分区没有得到值,那我们可以通过设置这个值,来决定每次分发的数据的多少

我们设置这个值为1,结果发现输出的结果好像是比较平均的,但是也还是个数不同,导致这个结果出现的原因是因为,进过filter处理后的元素经过shuffle处理,会按照一个分区内的元素进行分发处理,假如原本有4个分区,第一个分区内有11个元素,第二个分区内有9个元素,第三四个,,,经过repartition分区还是四个分区,第一个分区内的11个元素分发,到重分区后的1 2 3 4,过程是挨个分到四个分区,第四个分区最后会有2个元素,123分区都是三个元素

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

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

相关文章

【CICID】GitHub-Actions-SpringBoot项目部署

[TOC] 【CICID】GitHub-Actions-SpringBoot项目部署 0 流程图 1 创建SprinBoot项目 ​ IDEA创建本地项目,然后推送到 Github 1.1 项目结构 1.2 Dockerfile文件 根据自身项目,修改 CMD ["java","-jar","/app/target/Spri…

【vuejs】vue2项目中封装组件的分析以及常用方式和属性讲解

1. 组件封装的目的与优势 1.1 提升开发效率 组件封装是Vue.js开发中的一种常见实践,其核心目的在于提高开发效率。通过将通用的功能和界面元素抽象成独立的组件,开发者可以在不同的项目和业务场景中重复使用这些组件,从而减少重复编写代码的…

国产精品ORM框架-SqlSugar详解 SqlSugar初识 附案例源码 云草桑 专题一

国产精品ORM框架-SqlSugar详解 1、SqlSugar初识 2、开始实操 3、增删改操作 4、进阶功能 5、集成整合 6、脚手架应用 sqlsugar 官网-CSDN博客 国产精品ORM框架-SqlSugar详解 SqlSugar初识 专题二-CSDN博客 1、SqlSugar初识 1.1 基本概念和历史 SqlSugar 是一款 老牌 …

vim网络和安全的操作及shell的使用

目录 vim模式 一般模式下的基本操作: 一般模式切换到编辑模式: 一般模式切换到命令模式: Vim多窗口使用技巧 横向切割打开: 纵向切割打开: 关闭多窗口: 窗口的切换: 网络:…

milvus分批写入测试数据

milvus分批写入测试数据 场景: 假如现在需要向milvus写入500W数据,调用milvus的insert api一次性写入500W数据是不现实的,内存也吃不消。 这时候需要分批写入,例如每次写入1000行,直至写完500W数据。 实现代码如下: package …

PostgreSQL 慢 SQL 排查

作者:文若 前言 所谓慢SQL 是指在数据库中执行时间超过指定阈值的语句。慢查询太多,对于业务而言,是有很大风险的,可能随时都会因为某种原因而被触发,并且根据我们的经验,数据库最常出现的问题&#xff0…

《大数据基础》相关知识点及考点,例题

1.6大数据计算模式 1、MapReduce可以并行执行大规模数据处理任务,用于大规模数据集(大于1TB)的并行运算。MapReduce 极大地方便了分布式编程工作,它将复杂的、运行于大规模集群上的并行计算过程高度地抽象为两个函数一一Map和Redu…

[MySQL][复核查询][多表查询][自连接][自查询]详细讲解

目录 1.铺垫&基本查询回顾1.多表查询1.何为笛卡尔积?2.示例 2.自连接1.何为自连接?2.示例 3.子查询1.何为子查询?2.单行子查询3.多行子查询4.多列子查询5.在from子句中使用子查询6.合并查询 1.铺垫&基本查询回顾 前面讲解的MYSQL表的…

OPPO 2024届校招正式批笔试题-后端(C卷)

小欧的括号嵌套 题目描述 小欧想要构造一个合法的括号序列满足以下条件: 括号序列长度恰好为 2 n 2n 2n。括号序列的嵌套层数最大值为 r r r。 括号嵌套层数是指在一个字符串中,以左括号 “(” 和右括号 “)” 形成的括号对的最大嵌套深度。 输入…

获取欧洲时报中国板块前新闻数据-scrapy

这里写目录标题 1.创建项目文件二.爬虫文件编写三.管道存储四.settings文件 1.创建项目文件 创建scrapy项目的命令&#xff1a;scrapy startproject <项目名字> 示例&#xff1a; scrapy startproject myspiderscrapy genspider <爬虫名字> <允许爬取的域名>…

联邦学习(Federated learning)—— 去中心化联邦中心化联邦

提出联邦学习的目的&#xff1a;解决数据孤立问题和安全隐私问题。 联邦学习的主要思想&#xff1a;基于分布在多个设备上的数据集构建机器学习模型&#xff0c;同时防止数据泄露。&#xff08;是一种分布式机器学习方法&#xff09; 联邦学习架构 联邦学习的架构分为两种&…

修改了mybatis的xml中的sql不重启服务器如何动态加载更新

目录 一、背景 二、注意 三、代码 四、使用示例 五、其他参考博客 一、背景 开发一个报表功能&#xff0c;好几百行sql&#xff0c;每次修改完想自测下都要重启服务器&#xff0c;启动一次服务器就要3分钟&#xff0c;重启10次就要半小时&#xff0c;耗不起时间呀。于是在…

windows docker nvidia wsl2

下载驱动(GeForce Experience里的也可以)https://www.nvidia.cn/Download/index.aspx 安装wsl2https://blog.csdn.net/qq_39942341/article/details/121512900?ops_request_misc%257B%2522request%255Fid%2522%253A%2522172122816816800227436617%2522%252C%2522scm%2522%253A…

Docker构建LNMP环境并运行Wordpress平台

1.准备Nginx 上传文件 Dockerfile FROM centos:7 as firstADD nginx-1.24.0.tar.gz /opt/ COPY CentOS-Base.repo /etc/yum.repos.d/RUN yum -y install pcre-devel zlib-devel openssl-devel gcc gcc-c make && \useradd -M -s /sbin/nologin nginx && \cd /o…

沙尘传输模拟教程(基于wrf-chem)

沙尘传输模拟教程(基于wrf-chem) 文章目录 沙尘传输模拟教程(基于wrf-chem)简介实验目的wrf-chem简介 软件准备wps、wrf-chem安装conda安装ncl安装ncap安装 数据准备气象数据准备下垫面数据准备 WPS数据预处理namelist.wps的设置geogrid.exe下垫面处理ungrib.exe气象数据预处理…

docker替换主程序排错

docker替换主程序排错 背景&#xff1a;经常会遇到主程序启动错误&#xff0c;导致无法进入到容器内部排错。 替换命令 docker run --rm -it --entrypoint/bin/sh 镜像名

石油与化工行业的工业互联网平台革新之路

石油和化工工业互联网平台的变革是近年来工业发展的重要趋势之一&#xff0c;它基于工业互联网技术&#xff0c;通过数字化、网络化和智能化手段&#xff0c;推动石油和化工行业的转型升级。以下是关于石油和化工工业互联网平台变革的详细分析&#xff1a; 一、革新背景 行业…

@Valid校验前端参数

1、导入依赖。&#xff08;springmvc的stater-web和json依赖也需要添加&#xff0c;此处先不列举&#xff09; <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId></dependen…

批量下载网易云音乐歌单的Python脚本

在日常的音乐收藏和整理中,有时候我们希望能够快速地备份或下载网易云音乐中的歌曲,以便在没有网络连接的情况下也能随时听到自己喜欢的音乐。这时候,Python可以提供一种便捷的解决方案,让我们能够轻松地实现这一目标。 技术背景 本文介绍的Python脚本利用了Requests库和…

SpringSecurity + JWT 实现登录认证

目录 1. JWT 的组成和优势 2. JWT 的工作原理 2.1 生成 JWT 2.2 传输JWT 3. SpringSecurity JWT 实现登录认证 3.1 配置 Spring Security 安全过滤链 3.2 自定义登录认证过滤器 3.3 实现SpringSecurity用户对象 3.4 获取当前登录用户 1. JWT 的组成和优势 JWT 由三…