Spark合并改变unionAll的顺序

Spark coalesce changing the order of unionAll

我有 2 个数据框,我尝试对其执行 unionAll。

DF3=DF1.unionAll(DF2)

DF3.coalesce(1).write.csv("/location")

合并后 DF1 总是放在 DF2 下,我明白这是因为较小的分区排在最后,如下所示: .

有什么办法可以让我们的订单和我的工会一样?是DF1在前,DF2在合并后。

您是否尝试在合并之前使用 row_number?

from pyspark.sql import SparkSession, functions as F
from pyspark.sql.window import Window

DF3 = DF1.unionAll(DF2)\
    .withColumn("p", F.row_number().over(Window.orderBy(F.lit(None))))\
    .coalesce(1)\
    .orderBy(F.col("p"))\
    .drop("p")

DF3.write.csv("/location")
  1. 我正在创建一个名为“p”的新列,并使用 row_number 和排序方式 None 为每一行分配一个增量编号(如果您想排序,可以使用任何列名通过该特定列)
  2. 合并后我们将行排序回初始顺序
  3. 在写入 csv 之前删除“p”列