没有orderBy的Spark窗口函数

时间:2017-08-06 09:19:18

标签: apache-spark apache-spark-sql

我有一个包含a, b列的DataFrame,我希望使用窗口函数按a对数据进行分区,然后为b提供唯一索引

val window_filter = Window.partitionBy($"a").orderBy($"b".desc)
withColumn("uid", row_number().over(window_filter))

但是对于这个用例,b的排序是不必要的,可能很耗时。如何在不订购的情况下实现这一目标?

1 个答案:

答案 0 :(得分:1)

row_number() 不带 order by 或带 order by 常量具有非确定性行为,并且由于并行处理,可能会在每次运行中对相同的行产生不同的结果。如果按列的顺序不变,可能会发生同样的情况,行的顺序可能会因运行而异,您会得到不同的结果。