У меня есть кэшированный RDD, который я использую пару раз внутри цикла. В какой-то момент я изменяю переменную, указывающую на указанную СДР, и затем вызываю эту переменную.
var rdd1 = someRDD.chache
do{
val rdd2 = rdd1.someLogic
val rdd3 = rdd1.someOtherLogic
rdd1 = rdd1.someJoin(rdd4)
val rdd5 = rdd1.someAggregateFunction
rdd5.first //to start the transformations
rdd1.unpersist
} while(someCondition)
У меня вопрос, в этой точке val rdd5 = rdd1.someAggregateFunction
что будет удерживать rdd1
? someRDD
или rdd1.someJoin(rdd4)
? Нужно ли расставаться с ним в какой-то момент раньше? Или мне нужно снова кешировать его, если я буду использовать его снова после rdd5
?
РЕДАКТИРОВАТЬ Как-то так
var rdd1 = sc.parallelize(Seq(1, 2, 3, 4)).cache()
rdd1.collect().foreach(println)
rdd1 = sc.parallelize(Seq(4,5,6))
rdd1.collect().foreach(println)
печатает
1
2
3
4
4
5
6
Такзначения меняются. Это все еще оставляет вопрос кеширования. Нужно ли кэшировать rdd1 каждый раз, когда я его меняю? Если да, то нужно ли мне отказаться от этого?