在Spark SQL中按多个列进行分区

15

使用Spark SQL的窗口函数,我需要按多个列进行分区以运行我的数据查询,如下:

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

目前我没有测试环境(正在设置中),但是一个快速的问题是,这是否作为Spark SQL的窗口函数的一部分受支持,或者这样做不起作用?

2个回答

31

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

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

0

如果您在多个地方使用列进行partitionBy,则可以将其分配给一个列表变量,然后直接将该列表用作代码中partitionBy的参数值。

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

通过在列表变量末尾使用:_*,它会将其转换为varargs,并且这是partitionBy接受的参数类型。因此,您的代码将按照所需方式工作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接