繁体   English   中英

Spark toLocalIterator和迭代器方法之间的区别

[英]Difference between Spark toLocalIterator and iterator methods

在编写Spark程序时,我遇到了这个toLocalIterator()方法。 正如早些时候我只使用iterator()方法。

如果有人曾经使用过这种方法,请扔一些灯。

我在Spark程序中使用foreachforeachPartition方法时遇到过。

我可以将foreach方法结果传递给toLocalIterator方法或反之亦然。

toLocalIterator() -> foreachPartition()
iterator() -> foreach()

首先,不应该调用RDD中的iterator方法。 正如您可以阅读[Javadocs]( https://spark.apache.org/docs/1.0.2/api/java/org/apache/spark/rdd/RDD.html#iterator ( org.apache.spark)。 Partition ,org.apache.spark.TaskContext)): 这应该由用户“直接”调用,但可用于RDD自定义子类的实现者。

对于toLocalIterator ,它用于将分散在集群周围的RDD中的数据收集到一个唯一的节点(运行程序的节点),并对同一节点中的所有数据执行某些操作。 它类似于collect方法,但它不会返回List ,而是返回一个Iterator

foreach用于将函数应用于RDD的每个元素,而foreachPartition用于将函数应用于每个分区。 在第一种方法中,您一次获得一个元素(并行化更多),在第二种方法中,您获得整个分区(如果需要对所有数据执行操作)。

所以,是的,在使用foreachforeachPartition将函数应用于RDD foreachPartition您可以调用toLocalIterator来获取包含RDD所有内容的迭代器并对其进行处理。 但是,请记住,如果您的RDD非常大,您可能会遇到内存问题。 如果要在执行所需的操作后再次将其转换为RDD,请使用SparkContext再次并行化它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM