首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用scala中的varargs创建groupBy函数

用scala中的varargs创建groupBy函数
EN

Stack Overflow用户
提问于 2020-12-04 10:09:36
回答 1查看 191关注 0票数 0

我试图为scala中的groupBy单列或多列创建以下函数。

代码语言:javascript
运行
复制
def showGroupByDesc(df: DataFrame, cols: Column*): Unit = {
    df.groupBy(cols).count().sort($"count".desc).show()
  }

但是这个代码错误的地方是:

代码语言:javascript
运行
复制
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似乎正在编译以下方法:

代码语言:javascript
运行
复制
@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)
  }

实际上,我希望使用以下重写的方法:

代码语言:javascript
运行
复制
@scala.annotation.varargs
  def groupBy(cols: Column*): RelationalGroupedDataset = {
    RelationalGroupedDataset(toDF(), cols.map(_.expr), RelationalGroupedDataset.GroupByType)
  }

它不应该通过重写方法自动选择正确的函数吗?可能是个愚蠢的问题,任何帮助都会很感激。谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-04 10:22:28

尝试将:_*添加到传递colsgroupBy

代码语言:javascript
运行
复制
def showGroupByDesc(df: DataFrame, cols: Column*): Unit = {
  df.groupBy(cols:_*).count().sort($"count".desc).show()
}

它是向scala中的varargs函数传递参数的一种特殊语法。

如果没有:_*,编译器正在寻找接受Seq[Column]并不会找到它的函数。

例如,您可以阅读有关varargs 这里函数的更多信息。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65141631

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档