我想要一种方法一次(或小批量)从我的RDD中返回行,以便我可以在需要时在本地收集行。我的RDD足够大,无法容纳名称节点上的内存,因此运行collect()
会导致错误。
有没有办法重新创建collect()
操作但是使用生成器,以便RDD中的行传递到缓冲区?另一种选择是从缓存的RDD一次take()
100000行,但我不认为take()
允许您指定起始位置?
答案 0 :(得分:5)
最好的选择是使用RDD.toLocalIterator
,它当时只收集一个分区。它创建了一个标准的Python生成器:
{{1}}
您可以使用特定分区程序调整单个批处理中收集的数据量并调整分区数。
不幸的是它带来了价格。要收集小批量,你必须启动多个Spark工作,这是非常昂贵的。因此,一般来说,当时收集元素不是一种选择。