PySpark: сгруппировать по двум датам - PullRequest
0 голосов
/ 05 июля 2018

Я пытаюсь подсчитать, сколько раз поле «мера» имеет значение «М» между датой 1 и датой 2 для каждой пары id и id_2

** дата 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|
+------------+------------+---------------+----------------+----------+-----+

Я считаю, что окна могут быть полезны, но я не уверен, как применить их к этой проблеме. Ранее я решил эту проблему с помощью подзапроса, но в 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

Если вам нужна дополнительная информация, пожалуйста, дайте мне знать

Спасибо всем телам!

...