在 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 采用的参数类型。所以您的代码将按您想要的方式工作。
使用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 采用的参数类型。所以您的代码将按您想要的方式工作。