Spark数据帧:如何在groupBy + sum之后使用

时间:2017-09-28 09:27:21

标签: scala apache-spark dataframe

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

这是我的代码行:

    val summedDF = dataFrame.groupBy(colsNamesGroupBy.head, colsNamesGroupBy.tail : _*).sum(colsNamesSum:_*)

它在列名称数组上执行groupBy,然后将几列相加。

一切正常,但我得到的列有以下名称:sum(xxxx)。 我想在旅途中重命名这些,也许是通过地图操作,所以我只保留“xxxx”的名字。

任何人都有任何想法?

编辑:

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

    val summedDF = dataFrame.groupBy(colsNamesGroupBy.head, colsNamesGroupBy.tail : _*).agg(colsNamesSum.map(c => sum(c).as(c)))

2 个答案:

答案 0 :(得分:2)

我会尝试这样的事情:

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: _*)

答案 1 :(得分:0)

您需要导入

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

因此您可以使用.agg