语法
val newRdd = oldRdd.repartition(numPartitions)
numPartitions表示缩减后的分区数
源码
def repartition(numPartitions : scala.Int)(implicit ord : scala.Ordering[T] = { /* compiled code */ }) : org.apache.spark.rdd.RDD[T] = { /* compiled code */ }
作用
根据分区数,重新通过网络随机洗牌所有数据,百分百进行shuffle。
例子
package com.day1
import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}
object oper {
def main(args: Array[String]): Unit = {
val config:SparkConf = new SparkConf().setMaster("local[*]").setAppName("wordCount")
// 创建上下文对象
val sc = new SparkContext(config)
// repartition算子
val listRdd= sc.makeRDD(1 to 16 ,4)
val repartitionRdd = listRdd.repartition(3)
println(repartitionRdd.getNumPartitions)
}
}
输入
((1,2,3,4)
(5,6,7,8)
(9,10,11,12)
(13,14,15,16))
输出
3
示意图
示意图与coalesce一样。