[英]Group by then sum of multiple columns in Scala Spark
我有一个 DataFrame 有数百个特征列,像这样:
Country | ID | Feature_1 | Feature_2 | Feature_3 |....
US 123 1 5 0
US 456 0 10 1
CA 789 0 6 1
CA 999 0 3 0
...
我想按国家/地区执行分组,然后对每个功能求和,所以我应该得到这样的结果:
Country | Feature_1 | Feature_2 | Feature_3 | ....
US 1 15 1
CA 0 9 1
我如何有效地计算所有数百个特征的总和 function? 我知道一个功能,它是这样的:
df.groupBy("Country").sum("Feature_1)
你可以试试
import org.apache.spark.sql.functions._
val df = Seq(
("a", 9, 1),
("a", 4, 2),
("b", 1, 3),
("a", 1, 4),
("b", 2, 5)
).toDF("name", "x", "y")
df.groupBy(col("name"))
.agg(
sum(col("x")).as("xsum"),
sum(col("y")).as("ysum")
)
.show(false)
如果你想让它动态:
var exprs:List[Column] = List()
for(col <- List[String]("x", "y")){
exprs :+= expr(s"sum($col) as sum_$col")
}
df.groupBy(col("name"))
.agg(
exprs.head, exprs.tail:_*
)
.show(false)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.