Apache Spark 如何保留输出 textFile 中的行顺序?

问题描述

任何人都可以帮助我理解 apache-spark 如何在从 textFile 读取时保留输出中的行顺序。考虑下面的代码片段,

sparkContext.textFile(<inputTextFilePath>)
        .coalesce(1)
        .saveAsTextFile(<outputTextFilePath>)

文本文件大小以 GB 为单位,我可以看到工作节点并行读取数据并写入单个文件中的目标文件夹(因为分区计数设置为 1)。当我打开输出文件时,我可以看到所有的行都按顺序排列。 Spark 如何实现这种排序?

解决方法

一般情况下无法保证。

coalesce 具有基于分区locality 的优化逻辑。然后,考虑到一个大文件有许多分区可能在同一个 worker 上,因此不能保证 - 为了减少混洗 - 保留该顺序。在某些情况下可能是这样,但并非总是如此。

对于镶木地板,兽人其他注意事项适用,但这是您声明的文本文件。