PySpark:按两个日期分组

时间:2018-07-05 14:32:19

标签: python pyspark pyspark-sql

我正在尝试计算每个对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

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

谢谢大家!

0 个答案:

没有答案