У меня есть спарк-приложение, выполняющее этапы вычислений - то есть
1. Вычислите ввод большого набора данных в AWS S3 (ds: data-original
), получите отфильтрованные результаты (ds1: data-intermediate
) и сохраните ds1
в AWS S3.
2. И в том же приложении продолжаем обрабатывать (фильтровать) ds1: data-intermediate
и выводить конечный результат ds2: data-final
.
3. Выполните некоторые действия на ds2
, а затем сохраните ds2
на AWS S3.
Таким образом, обработка выглядит так:
ds -> ds1
//ds1.persist()
ds1.write.save(...)
ds1 -> ds2
ds2.cache()
ds2.count
ds2.distinct
ds2.write.save(...)
Размер данных ds / ds1 / ds2 примерно равен 100 ГБ, 10 ГБ, 1 ГБ соответственно.
Я хочу использовать RDD-кэширование, чтобы избежать избыточных вычислений, но также хочу избежать ненужных SerDes и дискового ввода-вывода.
Мой вопрос: если я не сохраню ds1
, как показано в строке //ds1.persist()
, будет ли приложение перезапускать ds1
, когда оно вычислит ds1 -> ds2
?
Спасибо!