Функция mapGroupsWithState в статическом фрейме данных и почему?

#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 пытается обеспечить выполнение одного и того же запроса как для пакетной, так и для потоковой передачи — большинство операций поддерживают как пакетную, так и потоковую передачу. (Маркетинговое слово — «Унифицированный пакет и потоковая передача».) Это «наилучшие усилия», и существуют реальные ограничения на потоковый запрос, поэтому некоторые операции или рабочие нагрузки не будут поддерживаться в потоковом запросе.