是否可以迭代收集rdd的每个分区?

Is it possible to iteratively collect each partition of rdd?

我有一个 rdd,我需要将其存储在 mongoDB。

我尝试使用 rdd.map 将 rdd 的每一行写入 mongoDB,使用 pymongo。但是我遇到了 pickle 错误,因为似乎不支持将 pymongo 对象 pickling 给工人。

因此,我做了一个 rdd.collect() 来获取驱动程序的 rdd,并将其写入 mongoDB。

是否可以迭代地收集 rdd 的每个分区?这将最大限度地减少驱动程序内存不足的变化。

是的,这是可能的。您可以使用 RDD.toLocalIterator()。你应该记住,它不是免费的。每个分区都需要一个单独的作业,因此您应该考虑在使用数据之前保留数据。