Ответ 1
Да, Apache Spark отменит RDD при сборе мусора.
В RDD.persist
вы можете увидеть:
sc.cleaner.foreach(_.registerRDDForCleanup(this))
Это помещает WeakReference в RDD в ReferenceQueue, приводя к ContextCleaner.doCleanupRDD
, когда RDD собирает мусор. И там:
sc.unpersistRDD(rddId, blocking)
Для получения дополнительной информации см. ContextCleaner в целом и commit, который добавил его.
Несколько вещей, о которых нужно знать, когда полагаетесь на сборку мусора для неуправляемых RDD:
- RDD используют ресурсы для исполнителей, а сборка мусора происходит в драйвере. RDD не будет автоматически отключен до тех пор, пока на драйвере не будет достаточного давления на память, независимо от того, насколько полно заполняется диск/память исполнителей.
- Вы не можете отменить часть RDD (некоторые разделы/записи). Если вы создадите один постоянный RDD из другого, то оба должны будут полностью соответствовать исполнителям одновременно.