合并对spark中的分区数没有影响

时间:2016-06-29 13:58:03

标签: scala apache-spark

以下是代码:

  val nouns = sc.textFile("/Users/kaiyin/IdeaProjects/learnSpark/src/main/resources/nouns")
  val verbs = sc.textFile("/Users/kaiyin/IdeaProjects/learnSpark/src/main/resources/verbs")
  val sentences = nouns.cartesian(verbs).take(10)
  sentences.foreach(println _)
  println(s"N partitions for nouns: ${nouns.partitions.size}")
  nouns.coalesce(10, true)
  println(s"N partitions for nouns after coalesce: ${nouns.partitions.size}")

结果:

N partitions for nouns: 2
N partitions for nouns after coalesce: 2

来自spark 1.6.2 doc:

  

注意:使用shuffle = true,您实际上可以合并为更大的   分区数量。如果你的数量很少,这很有用   分区,比方说100,可能有几个分区   异常大。将导致调用coalesce(1000,shuffle = true)   在1000个分区中,使用散列分区程序分发数据。

但显然coalesce在这种情况下根本没有影响。为什么呢?

整个脚本在这里:https://github.com/kindlychung/learnSpark/blob/master/src/main/scala/RDDDemo.scala

1 个答案:

答案 0 :(得分:3)

coalesce不会修改RDD,但会返回新的RDD。由于您检查输入RDD的分区数,这是预期的输出。

val rdd = sc.parallelize(1 to 100, 10)
val coalesced = rdd.coalesce(200, true)
coalesced.partitions.size
// Int = 200