Как заставить Spark выполнить преобразование только один раз? - PullRequest
1 голос
/ 20 мая 2019

У меня есть искровое задание, которое случайным образом выбирает мои входные данные.Затем я создаю фильтр Блума для входных данных.Наконец, я применяю фильтр и объединяю данные с набором данных A.

Поскольку выборка является случайной, ее следует выполнять только один раз.

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

Вот мой код:

// raw data is a RDD
val rawData = loadData("/path/to/data").filter(ramdomSampling).persist(StorageLevel.MEMORY_AND_DISK_SER)

val myFilter = getMyBloomFilter(rawData)

// apply bloom filter and join input data with dataset A
val dataWithA = appliyFilterAndJoin(loadData, myFilter)

Как я могу заставить Spark выполнитькакие преобразования только один раз, даже если работникам не хватает памяти для кэша?

Спасибо!

1 Ответ

1 голос
/ 20 мая 2019

Попробуйте записать сэмпл DAG на выход (HDFS / S3 или локальная файловая система).Затем перечитайте этот вывод для следующих этапов.Таким образом, результат вашего шага выборки будет неизменным.

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