dataframe - Spark 中的 Dataframe 合并是否保持顺序?

标签 dataframe apache-spark rdd shuffle

我使用合并(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/

相关文章:

Python通过groupby进行求和运算,但排除非数字数据

python-3.x - 使用 df ['C' ] 与 df.loc[ :, 'C' ] 在 Pandas 数据框中分配新列

Python Spark 如何使用 RDD API 按组查找累计和

scala - spark RDD折叠方法的解释

python - 连接两个具有多个值分量的 RDD 并展平结果

python - 计算数据框中列的每一行中数组的每个唯一数组

python - Pandas .agg 中的过滤计数

scala - Spark 中是否有 Executor Startup 的 Hook ?

hash - Spark : Force two RDD[Key, Value] 与使用自定义分区器的位于同一位置的分区

Scala 错误找不到参数的隐式值