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

标签 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)))

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

最佳答案

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

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

关于scala - 使用列名数组聚合 Spark 数据框,保留名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39388307/

相关文章:

java - 如何在 Apache Spark 中使用 PathFilter?

apache-spark - 如何向通过 Spark 创建的 View 添加注释

apache-spark - WARN ReliableDeliverySupervisor : Association with remote system has failed, 地址现在被门控 [5000] 毫秒。原因:[已解除关联]

Elasticsearch + Apache Spark 性能

scala - Spark DataFrame/Dataset Find most common value for each key 高效的方式

mysql - 如何在spark中执行两个查询

scala - 如何在scala spark中通过键连接两个数据集

scala - 将单例对象编码为惰性值

arrays - ArrayBuffer 和 Array 有什么区别

scala - Spark 数据帧 : select the first 3 rows of each group