web-dev-qa-db-fra.com

Quelle est la difference entre cache et persist?

En termes de RDD persistance, quelles sont les différences entre cache() et persist() dans spark?

197
Ramana

Avec cache(), vous utilisez uniquement le niveau de stockage par défaut MEMORY_ONLY. Avec persist(), vous pouvez spécifier le niveau de stockage souhaité ( rdd-persistence ).

De la documentation officielle:

  • Vous pouvez marquer la persistance d'un RDD à l'aide des méthodes persist () ou cache ().
  • chaque RDD persistant peut être stocké avec un storage level différent
  • La méthode cache () est un raccourci pour utiliser le niveau de stockage par défaut, qui est StorageLevel.MEMORY_ONLY (stocker les objets désérialisés en mémoire).

Utilisez persist() si vous souhaitez affecter un niveau de stockage autre que MEMORY_ONLY à la variable RDD ( quel niveau de stockage choisir )

212
ahars

La différence entre les opérations cache et persist est purement syntaxique. cache est un synonyme de persister ou persister (MEMORY_ONLY), c'est-à-dire que cache est simplement persist avec le niveau de stockage par défaut MEMORY_ONLY


/ ** * Conserve ce RDD avec le niveau de stockage par défaut (MEMORY_ONLY). * /
def persist (): this.type = persist (StorageLevel.MEMORY_ONLY)

/ ** * Conserve ce RDD avec le niveau de stockage par défaut (MEMORY_ONLY). * /
def cache (): this.type = persist ()

voir plus de détails ici ...


La mise en cache ou la persistance sont des techniques d'optimisation pour les calculs (itératifs et interactifs) Spark. Ils permettent d’économiser les résultats partiels intermédiaires afin qu’ils puissent être réutilisés aux étapes suivantes. Ces résultats intermédiaires sous la forme RDDs sont donc conservés en mémoire (par défaut) ou dans une mémoire plus solide, telle qu'un disque, et/ou répliquée. RDDs peut être mis en cache à l'aide de l'opération cache. Ils peuvent également être persistés en utilisant l'opération persist.

persist, cache

Ces fonctions peuvent être utilisées pour ajuster le niveau de stockage d’un RDD. Lors de la libération de mémoire, Spark utilisera l'identificateur de niveau de stockage pour choisir les partitions à conserver. Le paramètre sans variantes persist () et cache () ne sont que des abréviations de persist(StorageLevel.MEMORY_ONLY).

Avertissement : Une fois le niveau de stockage modifié, il ne peut plus être modifié!

Attention - Cachez judicieusement ... voir ( (Pourquoi) avons-nous besoin d'appeler en cache ou de persister sur un RDD )

Ce n'est pas parce que vous pouvez mettre en cache un RDD en mémoire que vous devez le faire aveuglément. En fonction du nombre d'accès au jeu de données et de la quantité de travail à effectuer, le calcul peut être plus rapide que le prix payé par la pression accrue de la mémoire.

Il va sans dire que si vous ne lisez qu'un jeu de données une fois qu'il est inutile de le mettre en cache, cela ralentira votre travail. La taille des jeux de données en cache est visible dans le Spark Shell ..

Liste des variantes ...

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

* Voir l'exemple ci-dessous: *

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)

enter image here

Remarque: en raison de la très petite différence purement syntaxique entre la mise en cache et la persistance de RDDs, les deux termes sont souvent utilisés l'un pour l'autre.

Voir plus visuellement ici ....

Persiste dans la mémoire et sur le disque:

enter image description here

Cache

La mise en cache peut améliorer les performances de votre application dans une large mesure.

enter image description here

82
Ram Ghadiyaram

Il n'y a pas de différence. 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()
48
Mike Park

Spark donne 5 types de niveau de stockage

  • MEMORY_ONLY
  • MEMORY_ONLY_SER
  • MEMORY_AND_DISK
  • MEMORY_AND_DISK_SER
  • DISK_ONLY

cache() utilisera MEMORY_ONLY. Si vous voulez utiliser autre chose, utilisez persist(StorageLevel.<*type*>).

Par défaut, persist() stockera les données dans le segment de mémoire de la JVM sous forme d'objets non sérialisés.

23
ketankk

Les méthodes Cache () et persist () sont utilisées pour améliorer les performances du calcul spark. Ces méthodes permettent d’enregistrer les résultats intermédiaires afin qu’ils puissent être réutilisés aux étapes suivantes.

La seule différence entre cache () et persist () est que, grâce à la technique de cache, nous pouvons enregistrer les résultats intermédiaires en mémoire uniquement lorsque cela est nécessaire, tandis que dans Persist (), nous pouvons enregistrer les résultats intermédiaires dans 5 niveaux de stockage (MEMORY_ONLY, MEMORY_AND_DISK, MEMORY_ONLY_SER, MEMORY_AND_DISK_SER, DISK_ONLY).

3
user11332824