Как Apache Spark структурированный поток 2.3.0 позволяет приемнику знать, что новая строка является обновлением существующей строки? - PullRequest
0 голосов
/ 16 мая 2018

Как Spark структурированная потоковая передача сообщает приемнику, что новая строка является обновлением существующей строки при запуске в режиме обновления ? Проверяет ли он все значения всех столбцов новой строки и существующей строки на совпадение или вычисляет какой-то хэш?

1 Ответ

0 голосов
/ 16 мая 2018

Читая документацию , мы видим некоторую интересную информацию о режиме обновления (я добавил жирное форматирование):

Режим обновления - только строки, которые были обновлены в таблице результатов с момента последнего триггера, будут записаны во внешнее хранилище (доступно начиная с Spark 2.1.1). Обратите внимание, что это отличается от полного режима в том, что этот режим выводит только те строки, которые изменились с момента последнего запуска. Если запрос не содержит агрегатов, он будет эквивалентен режиму добавления .

Таким образом, для использования режима обновления должна быть какая-то агрегация, иначе все данные будут просто добавлены в конец таблицы результатов. В свою очередь, для использования агрегирования данных необходимо использовать один или несколько ключей в качестве ключа. Поскольку нужен ключ, легко узнать, была ли строка обновлена ​​или нет - просто сравните значения с предыдущей итерацией таблицы (ключ говорит вам, с какой строкой сравнивать). В агрегатах, содержащих groupby, столбцы, сгруппированные по столбцам, являются ключами.

Простые агрегаты, которые возвращают одно значение, не требуют ключа. Однако, поскольку возвращается только одно значение, оно будет обновлено, если это значение будет изменено. Примером здесь может быть взятие суммы столбца (без группировки).

Документация содержит изображение, которое дает хорошее понимание этого, см. «Модель быстрого примера» по ссылке выше.

...