Spark Dataframe groupBy with sequence as keys arguments

Vad*_* B. 1 scala apache-spark apache-spark-sql

我有一个spark dataFrame,我想通过多个键聚合值

正如Spark文档所示:

高清GROUPBY(COL1:字符串的cols:字符串*):GroupedData组使用指定的列数据框,这样我们就可以在上面运行聚集

所以我做了以下几点

 val keys = Seq("a", "b", "c")
 dataframe.groupBy(keys:_*).agg(...)
Run Code Online (Sandbox Code Playgroud)

Intellij Idea会引发以下错误:

  1. 扩展非重复参数
  2. 类型不匹配:预期Seq [Column],实际Seq [String]

但是,我可以手动传递多个参数而不会出现错误:

dataframe.groupBy("a", "b", "c").agg(...)
Run Code Online (Sandbox Code Playgroud)

所以,我的问题是:我如何以编程方式执行此操作?

zer*_*323 9

要么使用列 groupBy(cols: Column*)

import org.apache.spark.sql.functions.col

val keys = Seq("a", "b", "c").map(col(_))
dataframe.groupBy(keys:_*).agg(...)
Run Code Online (Sandbox Code Playgroud)

head/ tailgroupBy(col1: String, cols: String*):

val keys = Seq("a", "b", "c") 
dataframe.groupBy(keys.head, keys.tail: _*).agg(...)  
Run Code Online (Sandbox Code Playgroud)