2016-06-29 107 views
0

这里的分区数量没有影响是代码:聚结在火花

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 

从火花1.6.2 DOC:

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

但是显然​​3210在这种情况下根本没有效果。为什么?

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

+1

我认为名词中含有2个以上的项目是否正确? – micker

+0

根据'wc -l'的1525项 – qed

回答

3

​​3210不到位修改RDD但返回新RDD。由于您检查了输入RDD的分区数量,因此这是预期的输出。

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