我试图为scala中的groupBy单列或多列创建以下函数。
def showGroupByDesc(df: DataFrame, cols: Column*): Unit = {
df.groupBy(cols).count().sort($"count".desc).show()
}但是这个代码错误的地方是:
overloaded method value groupBy with alternatives:
(col1: String,cols: String*)org.apache.spark.sql.RelationalGroupedDataset <and>
(cols: org.apache.spark.sql.Column*)org.apache.spark.sql.RelationalGroupedDataset
cannot be applied to (Seq[org.apache.spark.sql.Column])从错误来看,scala似乎正在编译以下方法:
@scala.annotation.varargs
def groupBy(col1: String, cols: String*): RelationalGroupedDataset = {
val colNames: Seq[String] = col1 +: cols
RelationalGroupedDataset(
toDF(), colNames.map(colName => resolve(colName)), RelationalGroupedDataset.GroupByType)
}实际上,我希望使用以下重写的方法:
@scala.annotation.varargs
def groupBy(cols: Column*): RelationalGroupedDataset = {
RelationalGroupedDataset(toDF(), cols.map(_.expr), RelationalGroupedDataset.GroupByType)
}它不应该通过重写方法自动选择正确的函数吗?可能是个愚蠢的问题,任何帮助都会很感激。谢谢!
发布于 2020-12-04 10:22:28
尝试将:_*添加到传递cols到groupBy中
def showGroupByDesc(df: DataFrame, cols: Column*): Unit = {
df.groupBy(cols:_*).count().sort($"count".desc).show()
}它是向scala中的varargs函数传递参数的一种特殊语法。
如果没有:_*,编译器正在寻找接受Seq[Column]并不会找到它的函数。
例如,您可以阅读有关varargs 这里函数的更多信息。
https://stackoverflow.com/questions/65141631
复制相似问题