使用Spark SQL的窗口函数,我需要按多个列进行分区以运行我的数据查询,如下:
val w = Window.partitionBy($"a", $"b").rangeBetween(-100, 0)
目前我没有测试环境(正在设置中),但是一个快速的问题是,这是否作为Spark SQL的窗口函数的一部分受支持,或者这样做不起作用?
使用Spark SQL的窗口函数,我需要按多个列进行分区以运行我的数据查询,如下:
val w = Window.partitionBy($"a", $"b").rangeBetween(-100, 0)
目前我没有测试环境(正在设置中),但是一个快速的问题是,这是否作为Spark SQL的窗口函数的一部分受支持,或者这样做不起作用?
这样不行。第二个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)
:_*
,它会将其转换为varargs,并且这是partitionBy接受的参数类型。因此,您的代码将按照所需方式工作。