Nit*_*esh 3 java foreach iterator apache-spark
在编写Spark程序时,我遇到了这种toLocalIterator()方法.早先我只使用iterator()方法.
如果有人曾经使用过这种方法,请扔一些灯.
我在Spark程序中使用foreach和foreachPartition方法时遇到过.
我可以将foreach方法结果传递给toLocalIterator方法或反之亦然.
toLocalIterator() -> foreachPartition()
iterator() -> foreach()
Run Code Online (Sandbox Code Playgroud)
首先,iterator不应该调用RDD中的方法.正如您可以阅读[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将函数应用于每个分区.在第一种方法中,您一次获得一个元素(并行化更多),在第二种方法中,您获得整个分区(如果需要对所有数据执行操作).
所以是的,在使用函数将函数应用于RDD之后foreach,foreachPartition您可以调用toLocalIterator以获取包含RDD的所有内容的迭代器并对其进行处理.但是,请记住,如果您的RDD非常大,您可能会遇到内存问题.如果要在执行所需的操作后再次将其转换为RDD,请使用SparkContext再次并行化它.
| 归档时间: |
|
| 查看次数: |
8488 次 |
| 最近记录: |