apache-spark - 尝试在不聚合的情况下对 Pyspark df 进行分组(我认为)
问题描述
我正在尝试对以下 pyspark 数据框进行分组以组合renewal_mo 值,但似乎无法弄清楚。
我有这个数据框:
+--------------+----------+----------+---------+----------+---------+
|First_Purchase|Renewal_Mo|second_buy|third_buy|fourth_buy|fifth_buy|
+--------------+----------+----------+---------+----------+---------+
|6 |1 |1 |0 |0 |0 |
|6 |12 |36 |0 |0 |0 |
|6 |24 |4 |0 |0 |0 |
|6 |18 |2 |0 |0 |0 |
|6 |3 |6 |0 |0 |0 |
|6 |2 |8 |0 |0 |0 |
|6 |36 |1 |0 |0 |0 |
|6 |6 |12 |0 |0 |0 |
|6 |12 |0 |1 |0 |0 |
|6 |3 |0 |1 |0 |0 |
|6 |2 |0 |7 |0 |0 |
|6 |6 |0 |1 |0 |0 |
|6 |1 |0 |0 |1 |0 |
|6 |12 |0 |0 |1 |0 |
+--------------+----------+----------+---------+----------+---------+
并希望合并renewal_mo中的值,因此没有重复并生成此数据框:
|First_Purchase|Renewal_Mo|second_buy|third_buy|fourth_buy|fifth_buy|
+--------------+----------+----------+---------+----------+---------+
|6 |1 |1 |0 |1 |0 |
|6 |12 |36 |1 |1 |0 |
|6 |24 |4 |0 |0 |0 |
|6 |18 |2 |0 |0 |0 |
|6 |3 |6 |1 |0 |0 |
|6 |2 |8 |7 |0 |0 |
|6 |36 |1 |0 |0 |0 |
|6 |6 |12 |1 |0 |0 |
+--------------+----------+----------+---------+----------+---------+
但是 groupby 似乎是错误的方法,因为它需要传递一个聚合函数。我可以以某种方式使用Windows分区吗?能不能有别的办法?我在这里想念什么?
如果我尝试
foo.groupby('First_Purchase','Renewal_Mo').count().show(truncate=False)
我当然会丢失购买列,它只计算 Renewal_Mo 的实例。我不知道如何解决这个问题以立即获得所需的数据框
+--------------+----------+-----+
|First_Purchase|Renewal_Mo|count|
+--------------+----------+-----+
|6 |1 |2 |
|6 |12 |3 |
|6 |24 |1 |
|6 |18 |1 |
|6 |3 |2 |
|6 |2 |2 |
|6 |36 |1 |
|6 |6 |2 |
+--------------+----------+-----+
解决方案
我不明白你为什么说 groupby 是一种错误的方法,因为它需要一个聚合函数。我这样做的唯一方法是分组和聚合,有一个内置函数 sum 可以完全满足您的要求:
df.groupBy('First_Purchase','Renewal_Mo') \
.agg({'second_by': 'sum',
'third_by': 'sum'}) # So on with remaining columns
唯一发生的事情是此方法更改了列名,但您可以使用多种方法轻松解决它。
推荐阅读
- python - 如何在一个表单中保存两个相关条目
- sql - 如何获得具有过滤结果的列?
- magento - Razorpay 支付网关在通过 composer 安装时抛出错误
- python - 在散景条形图中制作一个迭代学术术语的滑块
- flutter - 使用 Provider 时清除 Flutter 中的状态
- node.js - 与 React Native App 的 MongoDb 集群连接
- javascript - 如何改变属性值
- javascript - 如何添加推送到返回过滤数组的 getter 的功能?
- android - 如何指定该应用仅支持英语?
- google-apps-script - 尝试在不选择工作表的情况下对两列进行排序