Хороший вопрос для экспертов Spark.
Я обрабатываю данные в операции с map
(RDD). Внутри функции mapper мне нужно искать объекты класса A
которые будут использоваться при обработке элементов в RDD.
Поскольку это будет выполняться над исполнителями, а создание элементов типа A
(которое будет проверяться), оказывается дорогостоящей операцией, я хочу предварительно загрузить и кэшировать эти объекты для каждого исполнителя. Каков наилучший способ сделать это?
-
Одна из идей заключается в передаче таблицы поиска, но класс
A
не является сериализуемым (без контроля над его реализацией). -
Другая идея - загрузить их в одноэлементный объект. Тем не менее, я хочу контролировать, что загружается в эту таблицу поиска (например, возможно, разные данные по различным заданиям Spark).
В идеале я хочу указать, что будет загружено однажды исполнителями (в том числе в случае потоковой передачи, чтобы таблица поиска оставалась в памяти между партиями) через параметр, который будет доступен водителю во время его запуска, до того, как данные обрабатываются.
Есть ли чистый и элегантный способ сделать это, или его невозможно достичь?