Оконная операция в Spark Структурированный Поток - PullRequest
0 голосов
/ 27 октября 2018

Я не понял состояния в оконном процессе. Например;

val sums = levels.
  groupBy(window($"time", "5 seconds")).
  agg(sum("level")).show()
  1. Согласно приведенному выше коду, Spark сохраняет состояния только в последние 5 секунд?
  2. Удаляются ли старые состояния в каждой оконной операции?
  3. Где хранятся состояния окон? Объем памяти?

А с водяным знаком удаляются ли старые состояния в каждой операции группировки?

1 Ответ

0 голосов
/ 30 октября 2018
  1. Согласно приведенному выше коду, Spark сохраняет состояния только в последние 5 секунд?

Это зависит от того, какую семантику вы используете: если вы используете время обработки, да, это так. Если вы используете время события, окна в состоянии будут удалены, когда водяной знак пройдет по его конечной отметке времени, поэтому, если вы разрешите события с опозданием на 7 дней, окна в состоянии будут удалены через 7 дней.

  1. Удаляются ли старые состояния в каждой оконной операции?

Выселение (удаление окон в состоянии) будет происходить для каждой партии.

  1. Где хранятся состояния окон? Память

Для Apache Spark хэш-карта в executor содержит пары состояний ключ / значение. На самом деле Spark содержит несколько версий (пакетов) состояний, поэтому вам может потребоваться увеличить объем занятой памяти. В худшем случае теоретически он может занимать в 100 раз больше памяти, чем версия состояния. (Это будет исправлено в Spark 2.4.0.)

Databricks заявляет, что их продукт использует RocksDB, что позволяет избежать их хранения в куче памяти.

А с водяным знаком удаляются ли старые состояния в каждой операции группировки?

Выселение происходит при работе с состоянием независимо от семантики: время обработки против времени события.

Надеюсь, это поможет.

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