En términos de RDD
persistencia, ¿cuáles son las diferencias entre cache()
y persist()
en la chispa?
202
En términos de RDD
persistencia, ¿cuáles son las diferencias entre cache()
y persist()
en la chispa?
Con cache()
, solo usa el nivel de almacenamiento predeterminado:
MEMORY_ONLY
para RDDMEMORY_AND_DISK
para conjunto de datosCon persist()
, puede especificar qué nivel de almacenamiento desea para RDD y Dataset .
De los documentos oficiales:
- Puede marcar un
RDD
persistente utilizando los métodospersist
() ocache
() en él.- cada persistente
RDD
se puede almacenar usando un diferentestorage level
- El
cache
método () es una abreviatura para usar el nivel de almacenamiento predeterminado, que esStorageLevel.MEMORY_ONLY
(almacenar objetos deserializados en la memoria).
Úselo persist()
si desea asignar un nivel de almacenamiento que no sea:
MEMORY_ONLY
al RDDMEMORY_AND_DISK
para el conjunto de datosEnlace interesante para la documentación oficial: qué nivel de almacenamiento elegir
cache()
ahora usa MEMORY_AND_DISKMEMORY_AND_DISK
es el valor predeterminado solo para conjuntos de datos.MEMORY_ONLY
sigue siendo el valor predeterminado para RDDver más detalles aquí ...
El almacenamiento en caché o la persistencia son técnicas de optimización para los cálculos de Spark (iterativos e interactivos). Ayudan a guardar resultados parciales intermedios para que puedan reutilizarse en etapas posteriores. Estos resultados intermedios como
RDD
s se mantienen en la memoria (por defecto) o en un almacenamiento más sólido como el disco y / o se replican.RDD
s se puede almacenar en caché mediante lacache
operación. También pueden persistirse mediante lapersist
operación.Advertencia -Cache juiciosamente ... vea ( (¿Por qué?) Necesitamos llamar al caché o persistir en un RDD )
El hecho de que pueda almacenar
RDD
en caché un archivo en la memoria no significa que deba hacerlo a ciegas. Dependiendo de cuántas veces se acceda al conjunto de datos y la cantidad de trabajo involucrado en hacerlo, la recalculación puede ser más rápida que el precio pagado por el aumento de la presión de la memoria.No hace falta decir que si solo lee un conjunto de datos una vez que no tiene sentido almacenarlo en caché, en realidad hará que su trabajo sea más lento. El tamaño de los conjuntos de datos en caché se puede ver desde Spark Shell.
Listado de variantes ...
* Ver ejemplo a continuación: *
Nota: Debido a la diferencia muy pequeña y puramente sintáctica entre el almacenamiento en caché y la persistencia de
RDD
s, los dos términos a menudo se usan indistintamente.Ver más visualmente aquí ...
Persistir en memoria y disco:
Cache
El almacenamiento en caché puede mejorar el rendimiento de su aplicación en gran medida.
fuente
No hay diferencia. De
RDD.scala
.fuente
Spark ofrece 5 tipos de nivel de almacenamiento
MEMORY_ONLY
MEMORY_ONLY_SER
MEMORY_AND_DISK
MEMORY_AND_DISK_SER
DISK_ONLY
cache()
utilizaráMEMORY_ONLY
. Si quieres usar otra cosa, úsalapersist(StorageLevel.<*type*>)
.De forma predeterminada
persist()
, almacenará los datos en el montón JVM como objetos no serializados.fuente
Cache () y persistir () ambos métodos se utilizan para mejorar el rendimiento del cálculo de chispa. Estos métodos ayudan a guardar resultados intermedios para que puedan reutilizarse en etapas posteriores.
La única diferencia entre cache () y persist () es que, utilizando la técnica de caché, podemos guardar resultados intermedios en la memoria solo cuando sea necesario, mientras que en Persist () podemos guardar los resultados intermedios en 5 niveles de almacenamiento (MEMORY_ONLY, MEMORY_AND_DISK, MEMORY_ONLY_SER, MEMORY_AND_DISK_SER, DISK_ONLY).
fuente