【问题标题】:Partitioning by multiple columns in Spark SQLSpark SQL中的多列分区
【发布时间】:2016-10-14 05:03:17
【问题描述】:
使用 Spark SQL 的窗口函数,我需要按多列分区来运行我的数据查询,如下:
val w = Window.partitionBy($"a").partitionBy($"b").rangeBetween(-100, 0)
我目前没有测试环境(正在设置这个),但作为一个快速的问题,目前是否支持作为 Spark SQL 的窗口函数的一部分,或者这不会工作?
【问题讨论】:
标签:
apache-spark
apache-spark-sql
window-functions
【解决方案1】:
这行不通。第二个partitionBy 将覆盖第一个。必须在同一个调用中指定两个分区列:
val w = Window.partitionBy($"a", $"b").rangeBetween(-100, 0)
【解决方案2】:
如果您在执行 partitionBy 的多个位置使用列,则可以将其分配给列表形式的变量,然后将该列表直接用作代码中 partitionBy 的参数值。
val partitioncolumns = List("a","b")
val w = Window.partitionBy(partitioncolumns:_*).rangeBetween(-100, 0)
通过在列表变量的末尾使用:_*,它将其转换为可变参数,这就是 partitionBy 采用的参数类型。所以你的代码会按照你想要的方式工作。