spark算子(repartition和coalesce)
2016-11-02 11:34
507 查看
coalesce
def coalesce(numPartitions:Int,shuffle:Boolean=false):RDD[T]该函数用于将RDD进行重分区,使用HashPartitioner。
第一个参数为重分区的数目,第二个为是否进行shuffle,默认为false。
repartition
def repartition(numPartitions: Int): RDD[T]该函数其实就是coalesce函数第二个参数为true的实现。
使用注意
他们两个都是RDD的分区进行重新划分,repartition只是coalesce接口中shuffle为true的简易实现,(假设RDD有N个分区,需要重新划分成M个分区)1)N < M。一般情况下N个分区有数据分布不均匀的状况,利用HashPartitioner函数将数据重新分区为M个,这时需要将shuffle设置为true。
2)如果N > M并且N和M相差不多,(假如N是1000,M是100)那么就可以将N个分区中的若干个分区合并成一个新的分区,最终合并为M个分区,这时可以将shuff设置为false,在shuffl为false的情况下,如果M>N时,coalesce为无效的,不进行shuffle过程,父RDD和子RDD之间是窄依赖关系。
3)如果N > M并且两者相差悬殊,这时如果将shuffle设置为false,父子RDD是窄依赖关系,他们同处在一个stage中,就可能造成Spark程序的并行度不够,从而影响性能,如果在M为1的时候,为了使coalesce之前的操作有更好的并行度,可以讲shuffle设置为true。
例子
scala> var data = sc.textFile("/tmp/lxw1234/1.txt") data: org.apache.spark.rdd.RDD[String] = MapPartitionsRDD[53] at textFile at :21 scala> data.collect res37: Array[String] = Array(hello world, hello spark, hello hive, hi spark) scala> data.partitions.size res38: Int = 2 //RDD data默认有两个分区 scala> var rdd1 = data.coalesce(1) rdd1: org.apache.spark.rdd.RDD[String] = CoalescedRDD[2] at coalesce at :23 scala> rdd1.partitions.size res1: Int = 1 //rdd1的分区数为1 scala> var rdd1 = data.coalesce(4) rdd1: org.apache.spark.rdd.RDD[String] = CoalescedRDD[3] at coalesce at :23 scala> rdd1.partitions.size res2: Int = 2 //如果重分区的数目大于原来的分区数,那么必须指定shuffle参数为true,//否则,分区数不便 scala> var rdd1 = data.coalesce(4,true) rdd1: org.apache.spark.rdd.RDD[String] = MapPartitionsRDD[7] at coalesce at :23 scala> rdd1.partitions.size res3: Int = 4
scala> var rdd2 = data.repartition(1) rdd2: org.apache.spark.rdd.RDD[String] = MapPartitionsRDD[11] at repartition at :23 scala> rdd2.partitions.size res4: Int = 1 scala> var rdd2 = data.repartition(4) rdd2: org.apache.spark.rdd.RDD[String] = MapPartitionsRDD[15] at repartition at :23 scala> rdd2.partitions.size res5: Int = 4
相关文章推荐
- Spark算子:RDD基本转换操作(2)–coalesce、repartition
- Spark算子:RDD基本转换操作(2)–coalesce、repartition
- Spark算子--coalesce和repartition
- Spark编程之基本的RDD算子coalesce, repartition, checkpoint
- Spark算子:RDD基本转换操作(2)–coalesce、repartition
- Spark算子[02]:coalesce,repartition
- Spark算子:RDD基本转换操作(2)–coalesce、repartition
- Spark算子:RDD基本转换操作(2)–coalesce、repartition
- Spark算子:RDD基本转换操作(2)–coalesce、repartition
- spark coalesce和repartition的区别
- Spark重新分区—repartition和coalesce的用法
- spark coalesce和repartition的区别
- Spark笔记-repartition和coalesce
- spark coalesce和repartition的区别
- Spark中repartition和coalesce的用法
- spark coalesce和repartition的区别
- spark coalesce和repartition的区别
- Spark源码系列:DataFrame repartition、coalesce 对比
- 【Spark Java API】Transformation(4)—coalesce、repartition
- spark coalesce和repartition的区别