2016-04-27 2 views
3

я оцениваемой через искровые-оболочка следующих линий SCALA кодов:Неожиданное поведение внутри метода foreachPartition в виде 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) 
} 

Выход заключается в следующем:

2 
3 
4 
5 
6 
7 
8 
9 
10 
11 

Почему раздел p становится пустым после первой карты?

ответ

6

Это не выглядит странно для меня, так как р является Итератором, когда вы идете через него с картой, он больше не имеет значения, и принимая во внимание, что длиной является аббревиатура для размера который реализована следующим образом:

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

вы получите 0.

Смежные вопросы