在 Spark SQL 中按多列进行分区

Partitioning by multiple columns in Spark SQL

使用Spark SQL的window函数,我需要按多列分区来运行我的数据查询,如下:

val w = Window.partitionBy($"a").partitionBy($"b").rangeBetween(-100, 0)

我目前没有测试环境(正在设置),但作为一个快速的问题,目前是否支持作为 Spark SQL 的 window 功能的一部分,还是这行不通?

这行不通。第二个 partitionBy 将覆盖第一个。必须在同一调用中指定两个分区列:

val w = Window.partitionBy($"a", $"b").rangeBetween(-100, 0)

如果您在执行 partitionBy 的多个位置使用列,那么您可以将其分配给列表形式的变量,然后将该列表直接用作代码中 partitionBy 的参数值。

val partitioncolumns = List("a","b")
val w = Window.partitionBy(partitioncolumns:_*).rangeBetween(-100, 0)

通过在列表变量的末尾使用 :_*,它将其转换为可变参数,这就是 partitionBy 采用的参数类型。所以您的代码将按您想要的方式工作。