按 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
如何有效地计算所有数百个特征的总和函数?我知道一个功能是这样的:
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)
我有一个包含数百个特征列的 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
如何有效地计算所有数百个特征的总和函数?我知道一个功能是这样的:
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)