繁体   English   中英

然后分组 Scala Spark 中多列的总和

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM