df.groupBy("col1", "col2", "col3")
效果很好。
但是当我尝试执行以下操作时:
val dimensions = Seq("col1", "col2", "col3")
df.groupBy(dimensions)
我收到了这个错误:
<console>:38: error: overloaded method value groupBy with alternatives:
(col1: String,cols: String*)org.apache.spark.sql.GroupedData <and>
(cols: org.apache.spark.sql.Column*)org.apache.spark.sql.GroupedData
cannot be applied to (Seq[String])
答案 0 :(得分:5)
*
表示varargs,因此您必须解压缩序列。如果您有如下签名:
def foo(ts: T*) = ???
可以使用T
类型的任意数量的参数调用它:
foo()
foo(t1)
foo(t2)
...
如果您有序列,可以使用_*
语法传递它:
val ts: Seq[T] = ???
foo(ts: _*)
有关详细信息,请参阅Scala语言规范中的Repeated Parameters section。
所以在这种情况下你可以:
df.groupBy(dimensions.head, dimensions.tail: _*)
匹配(col1: String,cols: String*)
或
df.groupBy(dimensions map col: _*)
匹配(cols: org.apache.spark.sql.Column*)