我的问题很简单,但我似乎无法找到合适的解决方案。我可以用可怕的代码破解它,我想找到一些优雅的东西。
这是我的代码行:
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)))
答案 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