在Spark上,Coalesce会重新分配分区还是只合并它们?

时间:2016-10-25 19:17:31

标签: apache-spark

如果我说我有3个分区,并且我做了coalesce(2)。我对spark的体验是它只是将分区连接在一起,并且不会将任何现有分区分成多个

  val data = List((1,1),(1,2),(2,2),(2,3),(3,3),(3,4))
  val rdd = sc.parallelize(data)
  val partitionedRdd = rdd.partitionBy(new org.apache.spark.HashPartitioner(3))
  partitionedRdd.saveAsTextFile("testPartition/partitioned")
  //$ cat partitioned/part-00000 
  //(3,3)
  //(3,4)
  //$ cat partitioned/part-00001 
  //(1,1)
  //(1,2)
  //$ cat partitioned/part-00002
  //(2,2)
  //(2,3)
  val coalescedRdd = partitionedRdd.coalesce(2)
  coalescedRdd.saveAsTextFile("testPartition/coalesced")
  //$ cat coalesced/part-00000
  //(3,3)
  //(3,4)
  //(2,2)
  //(2,3)
  //$ cat coalesced/part-00001
  //(1,1)
  //(1,2)

是否保证会继续发生?或者当前的实施是否巧合?

1 个答案:

答案 0 :(得分:0)

正如你所说,Coalesce将保证默认情况下只能共同/合并分区。除非您专门设置shuffle = True

,否则Coalesce不会触发随机播放(重新分配)

From the documentation

  

这导致狭窄的依赖性,例如如果你从1000个分区转到100个分区,那么就不会有一个shuffle,而是100个新分区中的每个分区将声明10个当前分区。