У меня есть искровое задание, которое случайным образом выбирает мои входные данные.Затем я создаю фильтр Блума для входных данных.Наконец, я применяю фильтр и объединяю данные с набором данных 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 выполнитькакие преобразования только один раз, даже если работникам не хватает памяти для кэша?
Спасибо!