En términos de RDDpersistencia, ¿cuáles son las diferencias entre cache()y persist()en la chispa?
202
En términos de RDDpersistencia, ¿cuáles son las diferencias entre cache()y persist()en la chispa?
Con cache(), solo usa el nivel de almacenamiento predeterminado:
MEMORY_ONLYpara RDDMEMORY_AND_DISKpara conjunto de datosCon persist(), puede especificar qué nivel de almacenamiento desea para RDD y Dataset .
De los documentos oficiales:
- Puede marcar un
RDDpersistente utilizando los métodospersist() ocache() en él.- cada persistente
RDDse puede almacenar usando un diferentestorage level- El
cachemé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_ONLYal RDDMEMORY_AND_DISKpara el conjunto de datosEnlace interesante para la documentación oficial: qué nivel de almacenamiento elegir
cache()ahora usa MEMORY_AND_DISKMEMORY_AND_DISKes el valor predeterminado solo para conjuntos de datos.MEMORY_ONLYsigue 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
RDDs se mantienen en la memoria (por defecto) o en un almacenamiento más sólido como el disco y / o se replican.RDDs se puede almacenar en caché mediante lacacheoperación. También pueden persistirse mediante lapersistoperación.Advertencia -Cache juiciosamente ... vea ( (¿Por qué?) Necesitamos llamar al caché o persistir en un RDD )
El hecho de que pueda almacenar
RDDen 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
RDDs, 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_ONLYMEMORY_ONLY_SERMEMORY_AND_DISKMEMORY_AND_DISK_SERDISK_ONLYcache()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