首页 > 解决方案 > 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

如果需要更多信息,请告诉我

谢谢大家!

标签: pythonpysparkpyspark-sql

解决方案


推荐阅读