2016-06-29 108 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