我想使用列名数组作为输入聚合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)))
如何才能使整个阵列发生这种情况?
答案 0 :(得分:5)
只需提供带别名的列序列:
val colNames: Seq[String] = ???
val exprs = colNames.map(c => sum(c).alias(c))
df.groupBy($"id").agg(exprs.head, exprs.tail: _*)