RDD的foreachPartition方法内部出现意外行为

Ada*_*ith 3 scala apache-spark rdd

我通过spark-shell评估了以下scala代码行:

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)
}
Run Code Online (Sandbox Code Playgroud)

输出如下:

2
3
4
5
6
7
8
9
10
11
Run Code Online (Sandbox Code Playgroud)

为什么第一张地图后分区p变空了?

Vit*_*nko 6

它对我来说并不奇怪,因为pIterator,当你用map浏览它时,它没有更多的值,并考虑到长度大小的快捷方式,它实现如下:

def size: Int = {
  var result = 0
  for (x <- self) result += 1
  result
}
Run Code Online (Sandbox Code Playgroud)

你得到0.