繁体   English   中英

pyspark对数据帧中的多列执行聚合总和

[英]pyspark perform aggregate sum on multple columns in dataframe

我有一个示例 df 输入数据框:

partner_id|month_id|value1 |value2|price1|price2|
1001      |  01    |10     |20    |1     |2     |
1002      |  01    |20     |30    |2     |3     |
1003      |  01    |30     |40    |3     |4     |
1004      |  02    |40     |50    |4     |5     |
1001      |  02    |50     |60    |5     |6     |
1001      |  02    |60     |70    |6     |7     |
1001      |  03    |70     |80    |7     |8     |

我想对 partner_id 列进行分组并对所有值列求和。 聚合代码如下所示:

df = df.groupBy(df.partner_id).agg(F.sum(df.value1).alias("value1"), F.sum(df.value2).alias("value2))

结果数据框:

partner_id|value1 |value2|
1002      |20     |30    |
1003      |30     |40    |
1004      |40     |50    |
1001      |190    |230   |

但是,我需要选择我的输入数据帧的所有其他列对应于按列分组,实现的最佳方法是什么?

预期输出如:

partner_id|month_id|value1 |value2|price1|price2|
1002      |  01    |20     |30    |2     |3     |
1003      |  01    |30     |40    |3     |4     |
1004      |  02    |40     |50    |4     |5     |
1001      |  02    |190    |230   |5     |6     |

什么是您的选择为month_idprice1price2列? 我选择了最小值。

df.groupBy('partner_id') \
  .agg(min('month_id').alias('month_id'), \
       sum('value1').alias('value1'), \
       sum('value2').alias('value2'), \
       min('price1').alias('price1'), \
       min('price2').alias('price2')) \
  .show()

+----------+--------+------+------+------+------+
|partner_id|month_id|value1|value2|price1|price2|
+----------+--------+------+------+------+------+
|      1002|       1|    20|    30|     2|     3|
|      1001|       1|   190|   230|     1|     2|
|      1003|       1|    30|    40|     3|     4|
|      1004|       2|    40|    50|     4|     5|
+----------+--------+------+------+------+------+

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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