- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
在编写 Spark 程序时,我遇到了这个 toLocalIterator()
方法。之前我只使用了 iterator()
方法。
如果有人用过这种方法,请点灯。
我在 Spark 程序中使用 foreach
和 foreachPartition
方法时遇到了问题。
我可以将 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
用于对每个分区应用一个函数。在第一种方法中,您一次获取一个元素(以并行化更多),而在第二种方法中,您获取整个分区(如果您需要对所有数据执行操作)。
所以是的,在使用 foreach
或 foreachPartition
将函数应用于 RDD 之后,您可以调用 toLocalIterator
来获取包含所有内容的迭代器RDD的并处理它。但是,请记住,如果您的 RDD 非常大,您可能会遇到内存问题。如果你想在完成你需要的操作后再次将它转换为 RDD,请使用 SparkContext
再次并行化它。
关于java - Spark toLocalIterator 和迭代器方法之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32199162/
在编写 Spark 程序时,我遇到了这个 toLocalIterator() 方法。之前我只使用了 iterator() 方法。 如果有人用过这种方法,请点灯。 我在 Spark 程序中使用 fore
我试图了解 toLocalIterator 的工作原理,我阅读了一些主题和博客但是我不确定一件特定的事情。 它是否立即将所有分区复制到驱动程序节点并创建一个迭代器?还是一次复制一个分区的数据,然后创建
我有一个 Spark 应用程序,需要将数据从执行程序获取到驱动程序,并且我正在使用 collect()。然而,我也遇到了toLocalIterator()。据我在网上读到的toLocalIterato
我是一名优秀的程序员,十分优秀!