如何在Pyspark中按字段对每组相同的值求和

弗莱克

我有一个名为“df”的数据框,它在“帐户名”字段的 groupby 中,此列中的每个条目的成本可以相同或不同,我只需要在它不同时添加它。这是原来的df:

accountname |   namespace   |   cost    
account001  |   ns1         |   11      
account001  |   ns1         |   11      
account001  |   ns1         |   11      
account001  |   ns1         |   11      
account001  |   ns2         |   10      
account001  |   ns2         |   10      
account002  |   ns3         |   50      
account002  |   ns3         |   50      
account002  |   ns3         |   50      
account003  |   ns4         |   5    

“帐户名”字段中唯一具有不同成本的条目是“帐户001”,我只需要添加 11 + 10 一次。我需要得到这样的东西:

accountname |   namespace   |   cost    |   cost_to_pay
account001  |   ns1         |   11      |   21
account001  |   ns1         |   11      |   21
account001  |   ns1         |   11      |   21
account001  |   ns1         |   11      |   21
account001  |   ns2         |   10      |   21
account001  |   ns2         |   10      |   21
account002  |   ns3         |   50      |   50
account002  |   ns3         |   50      |   50
account002  |   ns3         |   50      |   50
account003  |   ns4         |   5       |   5

知道怎么做吗?提前致谢。

麦克

您可以使用distinct, group byaccountname和 sum the cost删除重复项,并使用以下方法连接回原始数据帧accountname

import pyspark.sql.functions as F

df2 = (df.dropDuplicates(['accountname', 'namespace', 'cost'])
         .groupBy('accountname')
         .agg(F.sum('cost').alias('cost_to_pay'))
         .join(df, 'accountname')
         .select('accountname', 'namespace', 'cost', 'cost_to_pay')
      )

df2.show()
+-----------+---------+----+-----------+
|accountname|namespace|cost|cost_to_pay|
+-----------+---------+----+-----------+
| account001|      ns1|  11|         21|
| account001|      ns1|  11|         21|
| account001|      ns1|  11|         21|
| account001|      ns1|  11|         21|
| account001|      ns2|  10|         21|
| account001|      ns2|  10|         21|
| account002|      ns3|  50|         50|
| account002|      ns3|  50|         50|
| account002|      ns3|  50|         50|
| account003|      ns4|   5|          5|
+-----------+---------+----+-----------+

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章