我使用合并(1)将数据帧写入单个文件,如下所示。
df.coalesce(1).write.format("csv")
.option("header", true).mode("overwrite").save(output_path)
快速浏览一下文件就会发现顺序已被保留,但情况总是如此吗?如果订单未保留,我该如何执行? RDD的coalesce函数有一个额外的参数来禁止shuffle,但是Dataframe的coalesce方法只需要1个参数。
最佳答案
如果您读取文件 (sc.read.text
),DataFrame/Dataset/RDD
的行将按照它们在文件中的顺序排列。
list、map、filter、coalesce 和 flatMap
确实保留顺序。
sortBy、partitionBy 和 join
不保留顺序。
原因是大多数DataFrame/Dataset/RDD
操作在分区内的迭代器上工作。所以映射或过滤器无法打乱顺序。
如果您选择使用 HashPartitioner
并在 DataFrame/Dataset/RDD
上调用 invoke map
将更改 key 。在这种情况下,您可以使用 partitionBy
通过随机播放来恢复分区。
关于dataframe - Spark 中的 Dataframe 合并是否保持顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62302103/