如果在 MapPartiton 中使用迭代器到迭代器转换,那么它将如何允许数据溢出到磁盘。据我了解,MapPartition 需要内存中的整个分区来处理,但如果我使用迭代器到迭代器,那么数据如何溢出到磁盘(尽管事实上 MapPartiton 需要内存中的整个分区)。
从概念上讲,迭代器到迭代器的转换意味着定义一个 一次评估一个元素的过程。因此,Spark可以应用 该过程批量记录而不是读取整个记录 分区到内存中或创建包含所有输出的集合 记录在内存中,然后返回。最后, 迭代器到迭代器的转换允许 Spark 进行操作 分区太大,无法容纳单个执行器上的内存 没有内存错误。
此外,将分区保留为迭代器可以让 Spark 更有选择性地使用磁盘空间。当内存不适合时,迭代器到迭代器的转换允许 Spark 仅溢出那些不适合内存的记录,而不是溢出整个分区,从而节省磁盘 I/O 和重新计算的成本。
摘自《高性能 Spark》