如果我说我有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)
是否保证会继续发生?或者当前的实施是否巧合?
答案 0 :(得分:0)
shuffle = True
,否则Coalesce不会触发随机播放(重新分配)
这导致狭窄的依赖性,例如如果你从1000个分区转到100个分区,那么就不会有一个shuffle,而是100个新分区中的每个分区将声明10个当前分区。