Scala Spark数据帧:如何在groupBy+;总和

Scala Spark数据帧:如何在groupBy+;总和,scala,apache-spark,dataframe,Scala,Apache Spark,Dataframe,我的问题很简单,但似乎找不到合适的解决办法。我可以用可怕的代码破解它,我想找到一些优雅的东西 以下是我的代码行: val summedDF = dataFrame.groupBy(colsNamesGroupBy.head, colsNamesGroupBy.tail : _*).sum(colsNamesSum:_*) 它对列名数组进行分组,然后对一些列求和 一切正常,但我得到的列名称如下:sum(xxxx)。 我想在移动中重命名这些,可能需要一个映射操作,所以我只保留“xxxx”名

我的问题很简单,但似乎找不到合适的解决办法。我可以用可怕的代码破解它,我想找到一些优雅的东西

以下是我的代码行:

    val summedDF = dataFrame.groupBy(colsNamesGroupBy.head, colsNamesGroupBy.tail : _*).sum(colsNamesSum:_*)
它对列名数组进行分组,然后对一些列求和

一切正常,但我得到的列名称如下:sum(xxxx)。 我想在移动中重命名这些,可能需要一个映射操作,所以我只保留“xxxx”名称

有人知道吗

编辑:

我正在尝试类似的方法,但我得到“无法使用此签名解析symbol agg”:


我想试试这样的东西:

import org.apache.spark.sql.functions.{sum, col}

val aggregateExpr = colsNamesSum.map(c => sum(col(c)).as(c))

val summedDF = dataFrame.groupBy(colsNamesGroupBy.head, colsNamesGroupBy.tail : _*).agg(aggregateExpr.head, aggregateExpr.tail: _*)
你需要导入

import org.apache.spark.sql.functions._

因此,您可以使用
.agg

您是否研究过这个答案?我真的很想让它发挥作用,因为这是我正在寻找的解决方案。我得到了类型不匹配的例外。对不起,我最近迁移到Spark 2.1.1,所以.agg()方法中有一些更改,我不知道。我将编辑我的答案。这在我的案例中有效(Spark 2.1.1)。请试一试。现在我必须找到如何只保留第二列的相同名称:p
import org.apache.spark.sql.functions._