2016-04-27 2 views
3

ich durch die Funken Shell den folgenden Zeilen von scala Codes ausgewertet:Unerwartetes Verhalten innerhalb des foreachPartition Methode einer RDD

val a = sc.parallelize(Array(1,2,3,4,5,6,7,8,9,10)) 
val b = a.coalesce(1) 
b.foreachPartition { p => 
    p.map(_ + 1).foreach(println) 
    p.map(_ * 2).foreach(println) 
} 

Der Ausgang ist die folgende:

2 
3 
4 
5 
6 
7 
8 
9 
10 
11 

Warum die Partition p wird nach der ersten Karte leer?

Antwort

6

Es ist nicht seltsam aussehen mir da p ist Iterator, wenn Sie durch sie mit Karte gehen, es keine Werte mehr hat, und unter Berücksichtigung, dass Länge Abkürzung für Größe ist, die ist wie dies umgesetzt:

def size: Int = { 
    var result = 0 
    for (x <- self) result += 1 
    result 
} 

Sie 0.