Это ожидаемое поведение искры.Как большинство операций сохраняются в искре, также ленивая операция.Таким образом, даже если вы добавите персистентность для 1-го СДР, спарк не кеширует данные, пока вы не добавите какое-либо действие после операции персистентности.Операция map не является искрой в искре, и она также ленива.
Способ принудительного кэширования состоит в добавлении действия count
после сохранения RDD2
val RDD2 = RDD1.map({
println("RDD1")
....
}).persist(StorageLevel.MEMORY_AND_DISK)
RDD2.count // Forces the caching
Теперь, если вы выполните любую другую операцию, RDD2 не будет пересчитан