En termes de RDD
persistance, quelles sont les différences entre cache()
et persist()
en étincelle?
202
En termes de RDD
persistance, quelles sont les différences entre cache()
et persist()
en étincelle?
Avec cache()
, vous utilisez uniquement le niveau de stockage par défaut:
MEMORY_ONLY
pour RDDMEMORY_AND_DISK
pour DatasetAvec persist()
, vous pouvez spécifier le niveau de stockage que vous souhaitez pour RDD et Dataset .
De la documentation officielle:
- Vous pouvez marquer un
RDD
comme persistant à l'aide des méthodespersist
() oucache
().- chaque persistant
RDD
peut être stocké en utilisant un autrestorage level
- La
cache
méthode () est un raccourci pour utiliser le niveau de stockage par défaut, qui estStorageLevel.MEMORY_ONLY
(stocker les objets désérialisés en mémoire).
À utiliser persist()
si vous souhaitez attribuer un niveau de stockage autre que:
MEMORY_ONLY
au RDDMEMORY_AND_DISK
pour DatasetLien intéressant pour la documentation officielle: quel niveau de stockage choisir
cache()
maintenant utilise MEMORY_AND_DISKMEMORY_AND_DISK
est la valeur par défaut uniquement pour les jeux de données.MEMORY_ONLY
est toujours la valeur par défaut pour RDDvoir plus de détails ici ...
La mise en cache ou la persistance sont des techniques d'optimisation pour les calculs (itératifs et interactifs) de Spark. Ils aident à sauvegarder les résultats partiels intermédiaires afin qu'ils puissent être réutilisés dans les étapes suivantes. Ces résultats intermédiaires comme
RDD
s sont ainsi conservés en mémoire (par défaut) ou en stockage plus solide comme le disque et / ou répliqués.RDD
les s peuvent être mis en cache à l'aide de l'cache
opération. Ils peuvent également être persistés en utilisant l'persist
opération.Avertissement -Cachez judicieusement ... voir ( (Pourquoi) devons-nous appeler le cache ou persister sur un RDD )
Ce
RDD
n'est pas parce que vous pouvez mettre en cache un en mémoire que vous devez le faire aveuglément. Selon le nombre d'accès au jeu de données et la quantité de travail nécessaire, le recalcul peut être plus rapide que le prix payé par l'augmentation de la pression de la mémoire.Il va sans dire que si vous ne lisez un ensemble de données qu'une fois qu'il est inutile de le mettre en cache, cela rendra votre travail plus lent. La taille des jeux de données mis en cache peut être vue depuis le Spark Shell.
Liste des variantes ...
* Voir l'exemple ci-dessous: *
Remarque: En raison de la très petite différence purement syntaxique entre la mise en cache et la persistance de
RDD
s, les deux termes sont souvent utilisés de manière interchangeable.Voir plus visuellement ici ....
Persister dans la mémoire et le disque:
Cache
La mise en cache peut améliorer considérablement les performances de votre application.
la source
Il n'y a pas de différence. De
RDD.scala
.la source
Spark propose 5 types de niveaux de stockage
MEMORY_ONLY
MEMORY_ONLY_SER
MEMORY_AND_DISK
MEMORY_AND_DISK_SER
DISK_ONLY
cache()
va utiliserMEMORY_ONLY
. Si vous voulez utiliser autre chose, utilisezpersist(StorageLevel.<*type*>)
.Par défaut
persist()
, les données seront stockées dans le tas JVM en tant qu'objets non sérialisés.la source
Cache () et persist (), les deux méthodes sont utilisées pour améliorer les performances du calcul d'étincelle. Ces méthodes aident à enregistrer les résultats intermédiaires afin qu'ils puissent être réutilisés dans les étapes suivantes.
La seule différence entre cache () et persist () est qu'en utilisant la technique 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).
la source