【问题标题】:Spark dataframe : how to use as after a groupBy + sumSpark数据框:如何在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)))

【问题讨论】:

标签: scala apache-spark dataframe


【解决方案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

【讨论】:

    猜你喜欢
    • 2021-12-19
    • 2016-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-12
    • 2021-08-12
    • 1970-01-01
    相关资源
    最近更新 更多