以下是代码:
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
答案 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