hadoop - tutorial - que es pyspark
¿Dispersaría Spark el RDD cuando se dé cuenta de que ya no se usará? (2)
Como señala @Daniel, Spark eliminará las particiones del caché. Esto sucederá una vez que no haya más memoria disponible, y se hará usando un algoritmo utilizado menos recientemente . No es un sistema inteligente, como lo señala @eliasah.
Si no está almacenando demasiados objetos en la memoria caché, no tiene que preocuparse por ello. Si almacena demasiados objetos en la memoria caché, los tiempos de recopilación de JVM serán excesivos, por lo que es una buena idea no utilizarlos en este caso.
Podemos persistir un RDD en la memoria y / o el disco cuando queremos usarlo más de una vez. Sin embargo, ¿tenemos que deshacernos de nosotros mismos más adelante o Spark hace algún tipo de recolección de basura y no usa el RDD cuando ya no es necesario? Noté que si llamo a la función de unpersist yo mismo, obtengo un rendimiento más lento.
Sí, Apache Spark desconectará el RDD cuando se recolecte basura.
En RDD.persist
puedes ver:
sc.cleaner.foreach(_.registerRDDForCleanup(this))
Esto pone una WeakReference en el RDD en una ReferenceQueue que lleva a ContextCleaner.doCleanupRDD
cuando el RDD es basura. Y ahi:
sc.unpersistRDD(rddId, blocking)
Para obtener más contexto, vea ContextCleaner en general y la commit que lo agregó.
Algunas cosas que debe tener en cuenta al confiar en la recolección de basura para RDD no permanentes:
- Los RDD usan recursos en los ejecutores, y la recolección de basura ocurre en el controlador. El RDD no se soltará automáticamente hasta que haya suficiente presión de memoria en el controlador, sin importar qué tan lleno esté el disco / memoria de los ejecutores.
- No puede deshacer parte de un RDD (algunas particiones / registros). Si construye un RDD persistente de otro, ambos deberán ajustarse por completo a los ejecutores al mismo tiempo.