使用列名称数组聚合Spark数据框,保留名称

时间:2016-09-08 10:16:25

标签: scala apache-spark apache-spark-sql aggregate-functions

我想使用列名数组作为输入聚合Spark数据框,同时保留列的原始名称。

df.groupBy($"id").sum(colNames:_*)

这有效,但无法保留名称。受到here发现的答案的启发,我未能成功地尝试过这个:

df.groupBy($"id").agg(sum(colNames:_*).alias(colNames:_*))
error: no `: _*' annotation allowed here

它可以采用像

这样的单个元素
df.groupBy($"id").agg(sum(colNames(2)).alias(colNames(2)))

如何才能使整个阵列发生这种情况?

1 个答案:

答案 0 :(得分:5)

只需提供带别名的列序列:

val colNames: Seq[String] = ???
val exprs = colNames.map(c => sum(c).alias(c))
df.groupBy($"id").agg(exprs.head, exprs.tail: _*)