В следующем коде (написанном на scala) я дважды печатаю partition.size, но получаю два разных результата.Почему partition.size обращается к нулю в foreachPartition
Код:
val a = Array(1,2,3,4,5,6,7,8,9)
val rdd = sc.parallelize(a)
rdd.foreachPartition {
partition =>
println("1. partition.size: " + partition.size) //1. partition.size: 2
println("2. partition.size: " + partition.size) //2. partition.size: 0
}
Результаты:
1. partition.size: 2
2. partition.size: 0
Согласно Спарк API документ, раздел представляет собой тип итератора
def foreachPartition(f: (Iterator[T]) ⇒ Unit): Unit
Applies a function f to each partition of this RDD.
Так почему размер раздела устанавливается до 0?
@Moriarty, ответит ли это на ваш вопрос? – Sathish
Благодарим вас за ответ. И документация Scala Iterator тоже полезна. Так как правильно возвращать 0 после итерации, я обнаружил еще одну интересную вещь: ** Array [T] .iterator.size ** возвращает ненулевое значение при каждом вызове. Я прочитаю исходный код ** scala.Array ** и найду ответ позже. Еще раз спасибо. :) – Moriarty
приветствую :) – Sathish