Spark数据框:如何在groupBy + sum之后使用
Posted
技术标签:
【中文标题】Spark数据框:如何在groupBy + sum之后使用【英文标题】:Spark dataframe : how to use as after a groupBy + sum 【发布时间】:2017-09-28 09:27:20 【问题描述】:我的问题很简单,但我似乎找不到合适的解决方案。我可以用可怕的代码破解它,我想找到一些优雅的东西。
这是我的代码行:
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)))
【问题讨论】:
你看过这个答案***.com/questions/33882894/… 【参考方案1】:我会尝试这样的:
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: _*)
【讨论】:
我真的很想完成这项工作,因为这是我正在寻找的解决方案 我得到 typeMismatch 异常 对不起,我最近迁移到 Spark 2.1.1,所以 .agg() 方法有一些变化,我不知道。我将编辑我的答案。 这适用于我的情况(Spark 2.1.1)。请尝试一下。 现在我必须找到如何只保留具有相同名称的第二列:p【参考方案2】:你需要导入
import org.apache.spark.sql.functions._
所以你可以使用.agg
【讨论】:
以上是关于Spark数据框:如何在groupBy + sum之后使用的主要内容,如果未能解决你的问题,请参考以下文章
Spark Dataframe GroupBy 和计算复杂聚合函数
Spark Scala数据框具有单个Group By的多个聚合[重复]
如何在 python 中使用 Spark Data frame 和 GroupBy 派生 Percentile