Несколько групп, сохраняя свои заказы - PullRequest
1 голос
/ 26 сентября 2019

Давайте рассмотрим этот пример:

Clients   Routes   City   Timestamp
1         10        NY       0
1         11        NY       10
1         12        WDC      11    
1         13        NY       20
2         22        LA       15

То, что я хочу в качестве вывода, выглядит примерно так:

Clients   Routes_number    City   min(Timestamp)
1         2                NY       0
1         1                WDC      11    
1         1                NY       20
2         1                LA       15

Идея в том, что я должен сделать несколько групп по этомудержал свои заказы.Например, если мы видим города для Клиента 1, мы можем понять, что он путешествовал из Нью-Йорка -> WDC -> Нью-Йорк (в тот же день).Таким образом, идея состоит в том, чтобы создать группу, которая подсчитывает число маршрутов и минимальное время, но останавливает КАЖДОЕ ВРЕМЯ, когда находит новый город.Если я сделаю глобальную группу, то получу что-то вроде этого:

Clients   Routes_number    City   min(Timestamp)
1         3                NY       0
1         1                WDC      11    
2         1                LA       15

При таком выводе мы потеряли информацию о том, что у нас есть NY-> WDC и AGAIN NY.Мы подумали, что он сделал NY -> WDC только одним способом ...

Я даже не знаю, возможно ли выполнить такой запрос с использованием SQL или нужно ли это делать в моем коде (яЯ новичок в Spark & ​​Scala, но я использую Scala).

Спасибо!

1 Ответ

0 голосов
/ 26 сентября 2019

Это проблема пробелов и островков, которая может быть решена с помощью разницы номеров строк:

select client, city, count(*), min(timestamp)
from (select t.*,
             row_number() over (partition by client, city order by timestamp) as seqnum_1,
             row_number() over (partition by client order by timestamp) as seqnum_2
      from t
     ) t
group by client, city, (seqnum_2 - seqnum_1);

Здесь - это дБ <> скрипка.

Может быть сложно увидеть, как работает разница номеров строк, чтобы идентифицировать соседние строки с одинаковым значением города.Если вы посмотрите на результаты подзапроса, вы получите хорошее представление о том, как он работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...