Apache Spark 如何保留输出文本文件中的行顺序?

Posted

技术标签:

【中文标题】Apache Spark 如何保留输出文本文件中的行顺序?【英文标题】:How Apache Spark can preserve order of lines in the output textFile? 【发布时间】:2021-07-16 13:50:51 【问题描述】:

任何人都可以帮助我了解apache-spark 在从文本文件中读取时如何保持输出中的行顺序。考虑下面的代码sn-p,

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

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

【问题讨论】:

知道答案是否不正确吗? 【参考方案1】:

一般不保证。

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

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

【讨论】:

以上是关于Apache Spark 如何保留输出文本文件中的行顺序?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Apache Spark 将 RDD 写入文本文件

如何使用 Java API 将文本文件、图像存储到 Apache Spark 中?

如何使用apache spark通过列表对文本中的特定单词进行去标识化?

删除Apache Spark DataFrame中的重复项,并保留尚未删除的值的行?

Spark 错误 - 值文本文件不是 org.apache.spark.sparkcontext 的成员

使用 Apache Spark 和 Java 按列分组并将每组字符串写入文本文件