python - PySpark:在两个日期之间分组
问题描述
我正在尝试计算每对 id 和 id_2 在日期 1 和日期 2 之间字段“度量”具有值“M”的次数
** 日期 1 是采取措施的时间,日期 2 是日期 1 - 5 天,因为 5 天是我们要计算所采取措施数量的时间段。
| date 1| date 2| id | id_2 | measure|
+---------- +---------- +---------------+----------------+-----------+
|2016-10-25 |2016-10-20 | 1| 1| M|
|2016-10-26 |2016-10-21 | 1| 5| |
|2016-10-22 |2016-10-17 | 1| 1| M|
|2016-10-30 |2016-10-25 | 1| 2| M|
|2016-10-22 |2016-10-17 | 2| 1| M|
|2016-10-26 |2016-10-21 | 2| 2| |
|2016-10-18 |2016-10-13 | 2| 5| M|
|2016-10-25 |2016-10-20 | 2| 1| |
+------------+------------+---------------+----------------+-----------+
期望的输出是:
| date 1| date 2| id | id_2 | measure| count
+---------- +---------- +---------------+----------------+-----------+-----+
|2016-10-25 |2016-10-20 | 1| 1| M| 1|
|2016-10-26 |2016-10-21 | 1| 5| | 0|
|2016-10-22 |2016-10-17 | 1| 1| M| 0|
|2016-10-30 |2016-10-25 | 1| 2| M| 0|
|2016-10-22 |2016-10-17 | 2| 1| M| 0|
|2016-10-26 |2016-10-21 | 2| 2| | 0|
|2016-10-18 |2016-10-13 | 2| 5| M| 0|
|2016-10-25 |2016-10-20 | 2| 1| | 1|
+------------+------------+---------------+----------------+----------+-----+
我相信 windows 可能会有所帮助,但我不确定如何将它们应用于这个问题。以前我用子查询解决了这种问题,但在 Pyspark 中它们不能应用。
我之前使用的查询是:
SELECT a.date1,
a.date2,
a.id,
a.id_2,
a.measure,
(select count(data.[id]) as CountMeasure
from dataOrigin data
where data.id = a.id
and data.id_2 = a.id_2 and measure = 'M'
and datos.date1 > date2 and datos.date1 < a.date1) as count
FROM dataOrigin a
如果需要更多信息,请告诉我
谢谢大家!
解决方案
推荐阅读
- perl - Perl 模块安装错误 - ExtUtils::MM_Unix::tool_xsubpp : Can't find xsubpp at ...lib/ExtUtils/MM_Unix.pm line 3887
- linux - Unix - 从文件中删除偶数字节
- python - (-) 运算符如何将负数转换为正数?
- python - 我正在尝试在“https://dribbble.com/jobs”上抓取公司的名称
- unity3d - 在Unity中旋转对象以在一段时间内面向一个方向?
- android - 注册用户和未注册用户被带到同一页面。我怎样才能区分这两者?
- python - 使用正则表达式更改 m3u 文件中的字符串
- bash - 通过 ssh 首先使用本地类加载器(最后一个父类)加载的 WebSphere 类
- javascript - 如何在javascript中将DD-MMM-YYYY解析为YYYYMMDDHHMMSS?
- c++ - 如何在 Linux 上使用 kbhit() 和 getch()?C++