【发布时间】:2017-08-06 09:19:18
【问题描述】:
我有一个包含 a, b 列的 DataFrame,我想使用窗口函数通过 a 对数据进行分区,然后为 b 提供唯一索引
val window_filter = Window.partitionBy($"a").orderBy($"b".desc)
withColumn("uid", row_number().over(window_filter))
但是对于这个用例,通过b 订购是不需要的,并且可能很耗时。我如何在不订购的情况下实现这一目标?
【问题讨论】:
-
我意识到我可以 orderBy 与 partitionBy 相同的列,但我不确定这是否更好。
-
你可以按字面量 1 订购,如下图
Window.partitionBy($"a").orderBy(lit(1)) -
你的最终目标是什么?如果你只想要一个唯一的 id,你可以使用 monotonically_increasing_id 而不是使用窗口函数
-
@rogue-one 如果你解释(true) 你会看到它仍然在使用 lit(1) 进行排序,我不确定它会节省多少......
-
@rogue-one 的最终目标是为
a中的每个值取任意 1000(或不同的常数)
标签: apache-spark apache-spark-sql