首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spark -添加一列,该列对另一列进行求和,并按第三列分组,而不会丢失其他列

Spark -添加一列,该列对另一列进行求和,并按第三列分组,而不会丢失其他列
EN

Stack Overflow用户
提问于 2021-01-13 17:53:51
回答 1查看 28关注 0票数 0

我有一个包含5列的DataFrame:col11col2col3col4col5

我想添加col6,它将是col5的总和,按col1分组。但我不想失去其他栏目。

如果我这样做了:

代码语言:javascript
复制
df
  .groupBy("col1")
  .agg(sum("col5") as "col6")

然后我失去了第2-4列。

我可以通过运行以下命令来执行连接:

代码语言:javascript
复制
val sumValues = df
  .groupBy("col1")
  .agg(sum("col5") as "col6")

df
  .join(sumValues, Seq("col1"))

但这感觉有点过头了。

我希望做一些像这样的事情:

代码语言:javascript
复制
df
  .withGroupedColumn("col6", "col1", sum("col5") as "col6")

在Spark中有没有简单的方法可以做到这一点?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-13 17:55:30

您可以使用窗口函数:

代码语言:javascript
复制
val df2 = df.withColumn("col6", expr("sum(col5) over (partition by col1)"))

或等同于

代码语言:javascript
复制
import org.apache.spark.sql.expressions.Window

val df2 = df.withColumn("col6", sum("col5").over(Window.partitionBy("col1")))
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65699451

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档