语法
val newRdd = oldRdd.coalesce(numPartitions,shuffle)
numPartitions表示缩减后的分区数
shuffle表示是否进行shuffle操作,true表示进行,false表示不进行
源码
def coalesce(numPartitions : scala.Int, shuffle : scala.Boolean = { /* compiled code */ }, partitionCoalescer : scala.Option[org.apache.spark.rdd.PartitionCoalescer] = { /* compiled code */ })(implicit ord : scala.Ordering[T] = { /* compiled code */ }) : org.apache.spark.rdd.RDD[T] = { /* compiled code */ }
作用
缩减分区数,用于大数据集过滤后,提高小数据集的执行效率。
例子
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)
// coalesce算子
val listRdd= sc.makeRDD(1 to 16 ,4)
val coalesceRdd = listRdd.coalesce(3)
println(coalesceRdd.getNumPartitions)
}
}
输入
((1,2,3,4)
(5,6,7,8)
(9,10,11,12)
(13,14,15,16))
输出
3