RDD转换算子:重分区算子:【repartition、coalesce】
文章目录
- 1、repartition
- 功能
- 语法
- 举例
- 2、coalesce
- 功能
- 语法
- 举例
1、repartition
功能
调整RDD的分区个数,一般用于调大分区个数
,必须经过shuffle才能实现
,repartition底层就是 coalesce(shuffle=True)
语法
def repartition(self,numPartitions) -> RDD[T]
其中:
numPartitions是调整之后的分区数量
举例
如何构造sc对象并创建RDD 参考文章:
【Spark中创建RDD的两种方式】Spark中如何获取sc对象、以及创建RDD的两种方式
list01 = [1, 5, 2, 6, 9, 10, 4, 3, 8, 7]
# 没有指定分区,默认为2(sc对象需要构建)
rdd = sc.parallelize(list01)
# repartition 调整为4个分区,必然经历shuffle过程
bigrdd = rdd.repartition(4)
2、coalesce
功能
调整RDD的分区个数,可以选择是否经过Shuffle
,默认情况下不经过shuffle
语法
def coalesce(self, numPartitions, shuffle:bool) -> RDD[T]
将一个小分区变为大分区,shuffle 必须等于True
,否则分区数不发生改变
将一个大分区变为小分区,shuffle 可以等于 Flase
举例
list01 = [1, 5, 2, 6, 9, 10, 4, 3, 8, 7]
# 没有指定分区,默认为2
rdd = sc.parallelize(list01)
# 将一个小分区变为大分区,shuffle 必须等于True,否则分区数不发生改变
# 将一个大分区变为小分区,shuffle 可以等于 Flase
bigrdd = rdd.coalesce(8,shuffle=True)