tutorial started spark significado getting apache-spark distributed-computing rdd

apache spark - started - ¿Cuál es la diferencia entre cache y persistir?



rdd spark (5)

La diferencia entre las operaciones de cache y persist es puramente sintáctica. caché es sinónimo de persistir o persistir ( MEMORY_ONLY ), es decir, cache es simplemente persist con el nivel de almacenamiento predeterminado MEMORY_ONLY

/ ** * Persiste este RDD con el nivel de almacenamiento predeterminado ( MEMORY_ONLY ). * /
def persist (): this.type = persist (StorageLevel.MEMORY_ONLY)

/ ** * Persiste este RDD con el nivel de almacenamiento predeterminado ( MEMORY_ONLY ). * /
def cache (): this.type = persist ()

ver 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 provisionales 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 se pueden almacenar en caché utilizando la operación de cache . También pueden persistirse utilizando la operación de persist .

persist , cache

Estas funciones se pueden usar para ajustar el nivel de almacenamiento de un RDD . Al liberar memoria, Spark usará el identificador de nivel de almacenamiento para decidir qué particiones se deben mantener. El parámetro menos variantes persist () y cache () son solo abreviaturas de persist(StorageLevel.MEMORY_ONLY).

Advertencia : una vez que se ha cambiado el nivel de almacenamiento, no se puede volver a cambiar.

Advertencia - Caché juiciosamente ... vea ( (¿Por qué?) Necesitamos llamar al caché o persistir en un RDD )

El hecho de que pueda almacenar en caché un RDD 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 ...

def cache(): RDD[T] def persist(): RDD[T] def persist(newLevel: StorageLevel): RDD[T]

* Ver ejemplo a continuación: *

val c = sc.parallelize(List("Gnu", "Cat", "Rat", "Dog", "Gnu", "Rat"), 2) c.getStorageLevel res0: org.apache.spark.storage.StorageLevel = StorageLevel(false, false, false, false, 1) c.cache c.getStorageLevel res2: org.apache.spark.storage.StorageLevel = StorageLevel(false, true, false, true, 1)

Nota: Debido a la diferencia muy pequeña y puramente sintáctica entre el almacenamiento en caché y la persistencia de los RDD , 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.

En términos de persistencia de RDD , ¿cuáles son las diferencias entre cache() y persist() en spark?


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).


Con cache() , usa solo el nivel de almacenamiento predeterminado:

  • MEMORY_ONLY para RDD
  • MEMORY_AND_DISK para el conjunto de datos

Con persist() , puede especificar qué nivel de almacenamiento desea para RDD y Dataset .

De los documentos oficiales:

  • Puede marcar un RDD para que sea persistente utilizando los métodos persist () o cache () en él.
  • cada RDD persistente se puede almacenar usando un storage level diferente
  • El método cache () es una abreviatura para usar el nivel de almacenamiento predeterminado, que es StorageLevel.MEMORY_ONLY (almacenar objetos deserializados en la memoria).

Use persist() si desea asignar un nivel de almacenamiento que no sea:

  • MEMORY_ONLY al RDD
  • o MEMORY_AND_DISK para el conjunto de datos

Enlace interesante para la documentación oficial: qué nivel de almacenamiento elegir


No hay diferencia. De RDD.scala .

/** Persist this RDD with the default storage level (`MEMORY_ONLY`). */ def persist(): this.type = persist(StorageLevel.MEMORY_ONLY) /** Persist this RDD with the default storage level (`MEMORY_ONLY`). */ def cache(): this.type = persist()


Spark ofrece 5 tipos de nivel de almacenamiento

  • MEMORY_ONLY
  • MEMORY_ONLY_SER
  • MEMORY_AND_DISK
  • MEMORY_AND_DISK_SER
  • DISK_ONLY

cache() usará MEMORY_ONLY . Si desea usar otra cosa, use persist(StorageLevel.<*type*>) .

De forma predeterminada, persist() almacenará los datos en el montón JVM como objetos no serializados.