2016-06-29 3 views
0

Hier ist der Code:Coalescing hat keinen Einfluss auf die Anzahl der Partitionen in Funken

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}") 

Ergebnis:

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

Von Funken 1.6.2 doc:

Hinweis: Bei shuffle = true, Sie können tatsächlich zu einer größeren Anzahl von Partitionen verschmelzen. Dies ist nützlich, wenn Sie eine kleine Anzahl von Partitionen haben, sagen wir 100, möglicherweise mit einigen Partitionen ungewöhnlich groß. Wenn coalesce aufgerufen wird (1000, shuffle = true), wird in 1000 Partitionen ausgegeben, wobei die Daten mit einem Hash-Partitionierer verteilt werden.

Aber anscheinend coalesce hat in diesem Fall überhaupt keine Wirkung. Warum?

ganze Skript ist hier: https://github.com/kindlychung/learnSpark/blob/master/src/main/scala/RDDDemo.scala

+1

Wäre es richtig anzunehmen, dass Substantive mehr als 2 Elemente enthalten? – micker

+0

1525 Artikel nach 'wc -l' – qed

Antwort

3

coalesce nicht RDD anstelle ändern, sondern gibt einen neuen RDD. Da Sie die Anzahl der Partitionen der Eingangs-RDD überprüfen, ist dies eine erwartete Ausgabe.

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