【发布时间】:2017-08-24 19:44:07
【问题描述】:
我正在尝试在 Spark/Scala 中对以下数据框中的列求和,该数据框本身是通过另一个数据框创建的。我使用这个答案作为指导:How to sum the values of one column of a dataframe in spark/scala
这是我的数据,由另一个聚合函数创建并分配给数据框:
+-------------+----+----+
|activityLabel| 1_3|4_12|
+-------------+----+----+
| 12|1075| 0|
| 1| 0|3072|
| 6|3072| 0|
| 3| 0|3072|
| 5|3072| 0|
| 9|3072| 0|
| 4|3072| 0|
| 8|3379| 0|
| 7|3072| 0|
| 10|3072| 0|
| 11|3072| 0|
| 2| 0|3072|
+-------------+----+----+
这是我创建数据框的代码:
def createRangeActivityLabels(df: DataFrame): Unit = {
val activityRange: List[(Int, Int)] = List((1, 3), (4, 12))
val exprs: List[Column] = activityRange.map {
case (x, y) => {
val newLabel = s"${x}_${y}"
sum(when($"activityLabel".between(x, y), 0).otherwise(1)).alias(newLabel)
}
}
val df3: DataFrame = df.groupBy($"activityLabel").agg(exprs.head, exprs.tail: _*)
df3.show
这是得到总和的代码。我要做的就是将标记为 1_3 (exprs.head) 和 4_12 (exprs(1)) 的列相加
val indexedLabel0: Int = df3.agg(sum(exprs.head)).first.getAs[Int](0)
}
我收到以下错误:org.apache.spark.sql.AnalysisException:不允许在另一个聚合函数的参数中使用聚合函数。请在子查询中使用内部聚合函数。;;
我尝试了多种解决方案来解决此问题,但似乎没有任何效果。所有想法都表示赞赏。谢谢!
【问题讨论】:
标签: scala apache-spark apache-spark-sql spark-dataframe