Обе опции строго говоря неверны.
Первый, как вы подозреваете, удаляет флаг кэширования до фактического сбора данных.
Второй фактически запускает кэш, но так какВы никогда не оцениваете, что rdd3
кэшированный rdd1
просто сохраняется, и сразу после этого отбрасывается.Удаление rdd1.cache()
должно фактически улучшить производительность.Кроме того, rdd2.cache()
кажется устаревшим, поскольку результат никогда не используется повторно.
Если textFile
загружает данные из дорогого хранилища, вы можете структурировать свой код следующим образом:
rdd1 = sc.textFile(...)
rdd1.cache()
rdd2 = rdd1.map(...).partionBy(...)
rdd3 = rdd1.reduceByKey(...).map(...)
rdd2.someAction()
rdd3.someAction()
rdd1.unpersist()
гдеsomeAction
- это действие, которое вы хотите выполнить с конкретным RDD
.