在下面的代码中(用scala编写),我打印了partition.size两次,但得到了两个不同的结果。
代码:
1. partition.size: 2
2. partition.size: 0
结果:
def foreachPartition(f: (Iterator[T]) ⇒ Unit): Unit
Applies a function f to each partition of this RDD.
根据Spark API文档,partition是一种Iterator
public void btn_2(View view)
{
play_2= MediaPlayer.create(this,R.raw.a1);
play_2.start();
while(play_2.isPlaying()) ;
play_2.release();
}
那么为什么分区的大小设置为0?
答案 0 :(得分:6)
挖掘后我找到答案,这不是Spark或你的程序的问题。它基本上按设计工作。我的意思是foreachpartition方法闭包将Iterator [T]作为输入,它是一个scala迭代器。在scala迭代器上调用size()方法时,它会计算大小并移动到列表的末尾。查看Scala Iterator的文档,
http://www.scala-lang.org/docu/files/collections-api/collections_43.html
它返回的元素数量。 注意:此操作后它将结束!
当你要求迭代器给你大小时,它会遍历它指向的序列中的每个元素,每次向右移动一个位置。当它没有更多元素遍历iterator.hasNext == false时,它将返回大小。但到那时它将耗尽所有元素。 因此,当第二次检索大小时,它返回0