python - PySpark - 基于开始/结束日期的行数
问题描述
假设我有一个如下的数据框,代表订阅了特定服务的帐户、订阅开始的日期以及订阅结束的日期(如果尚未结束,则为 null)。
ACCOUNT_ID START_DATE END_DATE
1 2018-05-01 2018-09-07
2 2018-07-20 2018-08-10
3 2018-06-10 null
我的目标是生成一个下表,其中每个月有多少人在该月的第一天订阅了该服务。
DATE SUBSCRIBER_COUNT
2018-01-01 0
2018-02-01 0
2018-03-01 0
2018-04-01 0
2018-05-01 1
2018-06-01 2
2018-07-01 3
2018-08-01 3
2018-09-01 2
2018-10-01 1
2018-11-01 1
我尝试过的方法:
- 以某种方式分解数据框,以便对于每个帐户,我有多行,该帐户每天都是订阅者的一行。然后将其过滤到我感兴趣的日期(即每个月的第一天),然后按天分组并计算帐户。
- 不知道如何在不使用讨厌的 UDF 的情况下生成这样的爆炸数据集。
- 生成我感兴趣的日期列表;对于每一个,将一个新的布尔列添加到名为 do 的原始数据
subscribed_yyyymmdd
框中start < day && day < end
。然后对这些列进行布尔计数以获取订阅者计数。- 必须添加新列很笨重,而且如果我想每天而不是每月这样做,也不能很好地扩展
解决方案
推荐阅读
- python - 更改IP连接和断开WiFi和ExpressVPN python
- tensorflow - TensorFlow 自定义损失显示不正确的详细信息
- bootstrap-4 - 移动模式下文本无响应
- c - 为什么这个循环会无限运行?for循环中的逗号分隔条件
- windows - 来自 cygwin-gcc 生成文件的奇怪 PE 部分
- docker-compose - 如何解决 docker:layers_calculator 上的错误以计算私有缠结上的 Merkle 树?
- kubernetes - 如何在 Kubernetes 上为 Kafka-connect 创建连接器?
- php - 在登录和注册时使用 htmlspecialchars
- security - 限制服务器的公共访问
- reactjs - 如何在 reactjs 库开发环境中使用 react-hooks?