PySpark - Coalesce(1)是否保留范围分区的顺序?



查看Spark的UI和物理规划,我发现orderBy是由Exchange rangepartitioning(col#0000 ACS NULLS FIRST, 200)完成的,然后是Sort [col#0000 ACS NULLS FIRST], true, 0

根据我的理解,rangepartitioning将为每个分区定义最小值和最大值,并将列值在min和max内的数据排序到该分区中,从而实现全局排序。

但是现在我有200个分区,我想输出到一个csv文件。如果我执行repartition(1), spark将触发洗牌,排序将消失。然而,我尝试了coalesce(1),它保留了全局排序。然而,我不知道这是否仅仅是纯粹的运气,因为coalesce并不一定会减少分区的数量。保持分区的顺序。有人知道如何重新分区以保持rangepartitioning之后的顺序吗?非常感谢。

正如你自己所说,维护秩序不是合并API契约的一部分。你必须选择:

  1. 收集命令dataframe行实例的列表和写csv外火花
  2. 使用spark将分区写入单个CSV文件,并使用其他工具将分区连接起来,例如"hadoop dfs getmerge";

最新更新