В кэше памяти сохраняется между пакетами spark structured streaming

#scala #caching #guava #spark-structured-streaming

#scala #кэширование #guava #spark-structured-streaming

Вопрос:

Каков правильный способ наличия кэша LRU в памяти в приложении scala, которое работает поверх spark structured streaming, который сохраняется в пакетах.

Я пытался использовать кэш Guava, но я думаю, что из-за того, что он не сериализуем, даже если я использую его как синглтон, новый кэш создается с каждым микропакетом.

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

Ответ №1:

Вы могли бы попробовать написать свою собственную логику внутри mapGroupsWithState или flatMapGroupsWithState

Это хранилище с отслеживанием состояния, которое может содержать вычисленные значения для поиска

Смотрите эту ссылку: https://databricks.com/blog/2017/10/17/arbitrary-stateful-processing-in-apache-sparks-structured-streaming.html