#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