#scala #spark-structured-streaming #stateful
#scala #spark-structured-streaming #с сохранением состояния
Вопрос:
Когда нам нужно использовать функцию mapGroupsWithState для статического фрейма данных?
Согласно documentation(https://spark.apache.org/docs/2.2.0/api/java/org/apache/spark/sql/streaming/GroupState.html),
В случае пакетного набора данных существует только один вызов, и объект состояния будет пустым, поскольку предшествующего состояния нет. По сути, для пакетных наборов данных [map / flatMap] GroupsWithState эквивалентно группам [map / flatMap], и любые обновления состояния и / или тайм-ауты не имеют никакого эффекта.
Тогда почему этот метод существует для статического фрейма данных?
Комментарии:
1. Я думаю, потому что нет такого понятия, как «пакетный / статический набор данных» и «потоковый набор данных». Есть только набор данных. (Допустимо также для фрейма данных)
Ответ №1:
Spark пытается обеспечить выполнение одного и того же запроса как для пакетной, так и для потоковой передачи — большинство операций поддерживают как пакетную, так и потоковую передачу. (Маркетинговое слово — «Унифицированный пакет и потоковая передача».) Это «наилучшие усилия», и существуют реальные ограничения на потоковый запрос, поэтому некоторые операции или рабочие нагрузки не будут поддерживаться в потоковом запросе.