2021-02-21 spark coalesce 算子

算子功能:

    减少分区数量,

应用场景:ABC 3个分区分别处理10w条原始数据,但是在处理的筛选的过程中,过滤掉了大部分的数据,此时的ABC3个分区的数据量只有1000条,那么此时还使用原始的3个分区去处理这1000条数据,消耗太多,即可使用coaliesce算子,减少分区的数量

代码如下:    

 
package sparkcore.day01
import org.apache.spark.{SparkConf, SparkContext}
object demo01_coalesc {
   
   
def main(args: Array[String]): Unit = {
   
   
System.setProperty("hadoop.home.dir", "D:\\spark")
val conf = new SparkConf().setAppName("spakrcore").setMaster("local[*]")
val sc = new SparkContext(conf)
val mkRDD = sc.makeRDD(List(1,2,3,4,5,6),2)
val unit = mkRDD.coalesce(2).saveAsTextFile("output")
sc.stop()
}
}

注意:coalesce 算法默认是不会打乱分区的数据,所以不会重新组合数据,仅仅是缩减了分区,如果想要进行shuffle,将第二个参数设置为true,

1、默认 不进程shuffle 打乱数据的操作

 
object demo01_coalesc_02 {
   
   
def main(args: Array[String]): Unit = {
   
   
Logger.getLogger("org").setLevel(Level.ERROR)
System.setProperty("hadoop.home.dir", "D:\\spark")
val conf = new SparkConf().setAppName("spakrcore").setMaster("local[*]")
val sc = new SparkContext(conf)
val mkRDD = sc.makeRDD(List(1,2,3,4,5,6),3)
val unit = mkRDD.coalesce(2).saveAsTextFile("output")
sc.stop()
}
}

分区内的数据分别是

分区1:

1 2 

分区2:

3 4 5 6

1、将coalesce 设置为 进程shuffle 打乱数据的操作

分区1数据:

分区2数据:

数据并没有按照1 2 3 在分区1   4 5 6在分区2 ,是因为在coalesce设置shuffle为true的时候,会重新的打乱数据,并且重新将打乱的数据分配到2个分区中

猜你喜欢

转载自blog.csdn.net/weixin_38638777/article/details/113925857