У нас есть база данных временных рядов для пользовательских событий, которая выглядит следующим образом:
timestamp user_id event ticke_type error_type
2019-06-06 14:33:31 user_a choose_ticket ticke_b NULL
2019-06-06 14:34:31 user_b choose_ticket ticke_f NULL
2019-06-06 14:36:31 user_a booing_error NULL error_c
2019-06-06 14:37:31 user_a choose_ticket ticke_h NULL
2019-06-06 14:38:31 user_a booing_error NULL error_d
2019-06-06 14:39:31 user_a booing_error NULL error_e
Это один пример использования, который нам нужен:
Чтобы выяснить, какой билетТип вызывает некоторую ошибку при бронировании, нам нужно будет посмотреть тип билета, который доступен только для более раннего события choose_ticket
.
В этом случае мы ищем каждое событие booking_error
найдите предыдущее событие choose_ticket
для того же пользователя и объедините в нем тип заявки с событием booking_error
.
В идеале мы хотим получить вывод:
timestamp user_id event ticke_type error_type
2019-06-06 14:36:31 user_a booing_error ticke_b error_c
2019-06-06 14:38:31 user_a booing_error ticke_h error_d
2019-06-06 14:39:31 user_a booing_error ticke_h error_e
Самое близкое, что я могу найти, это Spark добавить новый столбец в фрейм данных со значением из предыдущей строки , что позволяет нам взять свойства из предыдущего события и применить его к событию сразу после.
Это почти работает, за исключением того, что при наличии нескольких событий (booing_error
в этом примере) только самые первые могут получить необходимые свойства в этом случае.например, это то, что мы получим с решением по ссылке SO выше:
timestamp user_id event ticke_type error_type
2019-06-06 14:36:31 user_a booing_error ticke_b error_c
2019-06-06 14:38:31 user_a booing_error ticke_h error_d
2019-06-06 14:39:31 user_a booing_error NULL error_e
Чтобы подвести итог, для данной строки, как найти предыдущую строку, соответствующую определенным критериям, и "cherry-pick" еесобственность закончилась?
Какой лучший способ сделать это?