Spark 实现重新分区 partitionBy、coalesce、repartition(附代码演示)

news/2024/12/22 9:26:07/

文章目录

 

1、partitionBy

源码中的定义(部分)

调用方式

2、coalesce

源码中的定义

调用方式

3、repartition

源码中的定义

调用方式 

repartition和coalesce的区别

代码演示 (跳转代码)


实现重新分区,本质上就是重新配置并行度,也就是说,如果我们将分区数设置为n,那么Spark作业的并行度就是n

1、partitionBy

传入自定义的分区策略 默认为按照key进行hash

源码中的定义(部分):

def partitionBy(self: "RDD[Tuple[K, V]]",numPartitions: Optional[int],partitionFunc: Callable[[K], int] = portable_hash,
) -> "RDD[Tuple[K, V]]":

调用方式

rdd.partitionBy(参数1,参数2)

参数1,分区数

参数2,传入自定义的分区策略 默认为按照key进行hash


2、coalesce

coalesce既可以实现RDD分区的合并缩小,也可以实现RDD分区的扩大

源码中的定义:

def coalesce(self: "RDD[T]", numPartitions: int, shuffle: bool = False) -> "RDD[T]":

调用方式

rdd.coalesce(参数1,参数2)

参数1,传入分区个数

参数2,传入 shuffle,默认为 False,为False则不进行shuffle,带有分区捆绑进行重新分区

若shuffle = True, 则进行shuffle操作,不带有分区捆绑进行重新分区 分区更加均匀(避免数据倾斜)


3、repartition

返回一个新的RDD,它刚好有numPartitions(参数1)个分区。

源码中的定义

def repartition(self: "RDD[T]", numPartitions: int) -> "RDD[T]":

调用方式 

rdd.repartition(参数1)

参数1,分区数

可以增加或减少此RDD中的分区。在内部,它使用shuffle来重新分发数据。

如果正在减少这个RDD中的分区数量,考虑使用' coalesce',这可以避免执行shuffle。


repartition和coalesce的区别:

repartition默认开启shuffle,

coalesce默认不开启,但可用参数配置,

实际上repartition底层调用的就是coalesce


代码演示 

# coding:utf8
import timefrom pyspark import SparkConf, SparkContextif __name__ == '__main__':conf = SparkConf().setAppName("test").setMaster("local[*]")sc = SparkContext(conf=conf)rdd = sc.parallelize([1, 2, 3, 4, 5, 1, 7, 8, 9, 10], 3)print(rdd.glom().collect())print(rdd.coalesce(2).glom().collect())print(rdd.coalesce(2, shuffle=True).glom().collect())print(rdd.repartition(2).glom().collect())

制作不易,点个赞吧~


http://www.ppmy.cn/news/47021.html

相关文章

C++ [图论算法详解] 欧拉路欧拉回路

蒟蒻还在上课,所以文章更新的实在慢了点 那今天就来写一篇这周刚学的欧拉路和欧拉回路吧 讲故事环节: 在 一个风雪交加的夜晚 18世纪初普鲁士的哥尼斯堡,有一条河穿过,河上有两个小岛,有七座桥把两个岛与河岸联系…

linux知识

1.vi 删除-dd i-insert 最后一行-G 第一行-g 查找-/ 替换-:s/old/new/g 2.wc -》 行数 字符数 字节数 -w 统计字数 3. sort -k 按某一列排序 -r reverse -n 按字符排 4.uniq -c 统计重复数量 5.head -4 取文件前4行 6.date --date"1 days ago" date "%Y%m%D %H…

Python 单样本学习实用指南:1~6 全

原文:Hands-On One-shot Learning with Python 协议:CC BY-NC-SA 4.0 译者:飞龙 本文来自【ApacheCN 深度学习 译文集】,采用译后编辑(MTPE)流程来尽可能提升效率。 不要担心自己的形象,只关心如…

C learning_6

目录 语句的种类 C语言&#xff1a;结构化是程序设计语言 顺序结构&#xff1a; 选择结构(分支结构): 循环结构&#xff1a; while语句中的break和continue 语句的种类 1.表达式语句&#xff1a;表达式语句是指一个表达式后面跟随一个分号的语句。 #include<stdio.h&g…

2021地理设计组二等奖:基于GIS的东江源区土壤侵蚀及其影响因素空间分析

一、作品背景 水土保持情况普查对我国具有重要意义。我国目前是世界上水土流失最严重的国家之一&#xff0c;水土流失面积极其广且量大&#xff1b;严重的水土流失问题是我国生态环境问题的重要板块&#xff0c;若是持续恶化&#xff0c;将会严重影响我国的生态安全、饮水安全…

4.17日报

get()和 load()的区别&#xff1f; 数据查询时&#xff0c;没有 OID 指定的对象&#xff0c;get() 返回 null&#xff1b;load() 返回一个代理对象。 load()支持延迟加载&#xff1b;get() 不支持延迟加载。 121. 说一下 hibernate 的缓存机制&#xff1f; hibernate 常用的缓存…

MIT6.824 Lecture18 Fork Consistency

Background 拜占庭问题&#xff08;Byzantine Generals Problem&#xff09;得名于一个古老的传说&#xff0c;讲述了拜占庭帝国在战争中的一个失败策略。在这个故事中&#xff0c;多名拜占庭将军要协调进攻或撤退的行动&#xff0c;但是其中一些将军可能会向其他帝国泄露假消…

【MySQL | 进阶篇】09、MySQL 管理及常用工具(mysqladmin、mysqlbinlog、mysqldump 等)的使用

目录 一、系统数据库 二、常用工具 2.1 mysql 示例 2.2 mysqladmin 示例 2.3 mysqlbinlog 示例 2.4 mysqlshow 示例 2.5 mysqldump&#xff08;数据备份&#xff09; 示例 2.6 mysqlimport/source&#xff08;数据恢复&#xff09; 2.6.1 mysqlimport 2.6.2 …