RDD 的分区和 Shuflee_通过算子重分区 | 学习笔记

简介: 快速学习 RDD 的分区和 Shuflee_通过算子重分区

开发者学堂课程【大数据Spark2020最新课程(知识精讲与实战演练)第二阶段RDD 的分区和 Shuflee_通过算子重分区学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/689/detail/11993


RDD 的分区和 Shuflee_通过算子重分区


内容介绍

一、通过 coalesce 算子指定

二、通过 repartitions 算子指定

 

重分区涉及到的算子一个叫 coalesce 还有一个叫 repatitions ,两个算子都可以重新指定分区数,但这两个算子还是有一些区别的。


一、通过 coalesce 算子指定

coalesce(numPartitions:Int, shuffle : Boolean = false)(implicitord:0rdering[T]=nul):RDD[T]

numPartitions

新生成的 RDD 的分区数

shuffle

是否 Shuffle

scala > val source = sc . parallelize (1 to 100,6)

source : org . apache . spark . rdd . RDD [ Int ]=ParallelCollectionRDD[0]atparallelizeat

< console >:24

scala > source . partitions . size

resθ:Int=6

scala > val noShuffleRdd = source . coalesce ( numPartitions =8, shuffle = false )

noShuffleRdd : org . apache . spark . rdd . RDD [ Int ]= CoalescedRDD [1] at coalesce at <console >:26

scala > noShuffleRdd . toDebugString

res l : String =

(6) CoalescedRDD [1] at coalesce at < console >:26[]

ParallelCollectionRDD [0] at parallelize at < console >:24[]

scala > val noShuffleRdd = source . coalesce ( numPartitions =8, shuffle = false )

noShuffleRdd : org . apache . spark .rdd . RDD[ Int ]=CoalescedRDD [1] at coalesce at < Console >:26

scalashuffleRdd.toDebugString

res3:String=

(8)MapPartitionsRDD [5] at coalesce at < Console >:26[]

coalescedRDD [4] at coalesce at < console >:26[]

Coalesce 算子接受两个参数,一个是 numPartitions ,另一个是 shuffle,默认情况下 shuffle 的值为 false 。默认情况下 coalesce 不进行 shuffle ,通过 coalesce 指定分区是可以不 shuffle 的,但是如果默认情况下 shuffle false ,那么 coalesce 只能减少分区。

举例

原本的 rdd 分区是6,那么新生成的 rdd 分区只能比6小,不能比6大,如果比6大,就必须要 shuffle。随意创建一个 rdd3scalaval rdd3=sc.parallelize(Seq(1,2,3,4,5,6),6),通过 seq 去创建1,2,3,4,5,6,指定分区数为3,新生成 rdd 原本分区数为3,通过 coalesce 算子,可以重新指定分区数,降低分区数值为1,第二个值为 false,即默认情况下不 shuffle ,即生成一个新的 rdd4rdd4生成一个新的 Partitions,这个时候就变成了1

Rdd5通过 rdd3来创建,这个时候 rdd3分区数为3,使用 coalesce 指定为4或者5,这个时候分区数和原来比是没有变化的,依然是3rdd6通过 rdd3.coalesce(5),rdd3的分区数是3想指定为5,需穿插一个 true,得到 rdd6,rdd6 Partitions.size 变成了5Coalesce 有两个参数,一个是重新指定的分区数,需要注意这个分区数是改变 rdd3的分区数还是新生成的 rdd 的分区数(改变新生成的 rdd 分区数)。如果希望通过 coalesce 减少 rdd 的分区数,制定一个参数就可以,如果希望增加分区数,第二个参数必须指定为 true ,第二个参数含义为 shuflle ,必须是 shuffle 操作才能把少的分区数变为多的分区数。

image.png

image.png


二、repartitions 算子指定

创建 rdd7rdd3的分区数依旧是3,生成新的 rdd 才会生成新的分区数。还有一个算子叫做 repartitions,发现分区数减少了,即新生成的 rdd7分区数等于1。再创建一个新的 rdd8,指定为5。这个时候 rdd8指定分区数为5,新生成rdd8的分区数等于5 repatitions 不仅能减少分区数,还可以增加分区数,并且 repatitions 这个只有一个参数。

image.png

repatitions 只有一个参数,但是 coalesce 有两个参数,进入 IDEA 当中写一下 repatition 看一下 repatition ,发现 repatition 的底层还是 coalesce ,并且 shuffle 永远指定为 true

相关文章
|
6天前
|
存储 分布式计算 Hadoop
|
2月前
|
分布式计算 监控 大数据
Spark RDD分区和数据分布:优化大数据处理
Spark RDD分区和数据分布:优化大数据处理
|
2月前
|
分布式计算 Hadoop 大数据
Spark 【分区与并行度】
Spark 【分区与并行度】
|
9月前
|
分布式计算 负载均衡 算法
Flink---5、聚合算子、用户自定义函数、物理分区算子、分流、合流
Flink---5、聚合算子、用户自定义函数、物理分区算子、分流、合流
|
存储 缓存 分布式计算
Spark RDD算子进阶(转换算子、行动算子、缓存、持久化)(下)
Spark RDD算子进阶(转换算子、行动算子、缓存、持久化)(下)
124 0
Spark RDD算子进阶(转换算子、行动算子、缓存、持久化)(下)
|
分布式计算 并行计算 Spark
|
分布式计算 大数据 Spark
RDD 的分区和 Shuflee_通过其他算子指定分区数 | 学习笔记
快速学习 RDD 的分区和 Shuflee_通过其他算子指定分区数
71 0
RDD 的分区和 Shuflee_通过其他算子指定分区数 | 学习笔记
|
分布式计算 大数据 Spark
RDD 算子_转换_重分区 | 学习笔记
快速学习 RDD 算子_转换_重分区
66 0
RDD 算子_转换_重分区 | 学习笔记
|
分布式计算 大数据 Shell
RDD 的分区和 Shuffle 查看分区 | 学习笔记
快速学习 RDD 的分区和 Shuffle 查看分区
93 0
RDD 的分区和 Shuffle 查看分区 | 学习笔记
|
分布式计算 大数据 Shell
RDD 的分区和 shuffle 创建 RDD 时指定分区数 | 学习笔记
快速学习 RDD 的分区和 shuffle 创建 RDD 时指定分区数
79 0
RDD 的分区和 shuffle 创建 RDD 时指定分区数 | 学习笔记