RDD
Was sind die Unterschiede zwischen cache()
und persist()
im Funken in Bezug auf die Persistenz ?
202
RDD
Was sind die Unterschiede zwischen cache()
und persist()
im Funken in Bezug auf die Persistenz ?
Mit verwenden cache()
Sie nur die Standardspeicherebene:
MEMORY_ONLY
für RDDMEMORY_AND_DISK
für DatensatzMit persist()
können Sie angeben, welche Speicherebene für RDD und Dataset gewünscht wird .
Aus den offiziellen Dokumenten:
- Sie können eine
RDD
zu persistierende Methode mit den Methodenpersist
() odercache
() markieren .- Jeder persistierte
RDD
kann mit einem anderen gespeichert werdenstorage level
- Die
cache
() -Methode ist eine Abkürzung für die Verwendung der StandardspeicherebeneStorageLevel.MEMORY_ONLY
(Speichern deserialisierter Objekte im Speicher).
Verwenden persist()
Sie diese Option, wenn Sie eine andere Speicherebene zuweisen möchten als:
MEMORY_ONLY
an die RDDMEMORY_AND_DISK
für DatensatzInteressanter Link für die offizielle Dokumentation: Welche Speicherebene soll gewählt werden?
cache()
jetzt MEMORY_AND_DISKMEMORY_AND_DISK
ist der Standardwert nur für Datensätze.MEMORY_ONLY
ist immer noch der Standardwert für RDDWeitere Details finden Sie hier ...
Caching oder Persistenz sind Optimierungstechniken für (iterative und interaktive) Spark-Berechnungen. Sie helfen dabei, Zwischenergebnisse zu speichern, damit sie in späteren Phasen wiederverwendet werden können. Diese Zwischenergebnisse
RDD
werden daher im Speicher (Standard) oder in einem festeren Speicher wie einer Festplatte gespeichert und / oder repliziert.RDD
s kann mitcache
operation zwischengespeichert werden . Sie können auch während despersist
Betriebs beibehalten werden .Warnung -Cache mit Bedacht ... siehe ( (Warum) müssen wir den Cache aufrufen oder auf einer RDD bestehen bleiben )
Nur weil Sie einen
RDD
im Speicher zwischenspeichern können, heißt das nicht, dass Sie dies blind tun sollten. Abhängig davon, wie oft auf das Dataset zugegriffen wird und wie viel Arbeit damit verbunden ist, kann die Neuberechnung schneller sein als der Preis, der durch den erhöhten Speicherdruck gezahlt wird.Es versteht sich von selbst, dass wenn Sie einen Datensatz nur dann lesen, wenn es keinen Sinn macht, ihn zwischenzuspeichern, dies Ihre Arbeit tatsächlich verlangsamt. Die Größe der zwischengespeicherten Datensätze kann der Spark-Shell entnommen werden.
Varianten auflisten ...
* Siehe Beispiel unten: *
Hinweis: Aufgrund des sehr kleinen und rein syntaktischen Unterschieds zwischen Caching und Persistenz von
RDD
s werden die beiden Begriffe häufig synonym verwendet.Sehen Sie hier mehr visuell ....
Behalten Sie Speicher und Festplatte bei:
Zwischenspeicher
Durch das Zwischenspeichern kann die Leistung Ihrer Anwendung erheblich verbessert werden.
quelle
Es gibt keinen Unterschied. Von
RDD.scala
.quelle
Spark bietet 5 Arten von Speicherebenen
MEMORY_ONLY
MEMORY_ONLY_SER
MEMORY_AND_DISK
MEMORY_AND_DISK_SER
DISK_ONLY
cache()
wird verwendenMEMORY_ONLY
. Wenn Sie etwas anderes verwenden möchten, verwenden Siepersist(StorageLevel.<*type*>)
.Standardmäßig
persist()
werden die Daten im JVM-Heap als unserialisierte Objekte gespeichert.quelle
Cache () und persist () werden beide Methoden verwendet, um die Leistung der Funkenberechnung zu verbessern. Diese Methoden helfen, Zwischenergebnisse zu speichern, damit sie in nachfolgenden Schritten wiederverwendet werden können.
Der einzige Unterschied zwischen cache () und persist () besteht darin, dass wir mit der Cache-Technik Zwischenergebnisse nur bei Bedarf im Speicher speichern können, während wir in Persist () die Zwischenergebnisse in 5 Speicherebenen speichern können (MEMORY_ONLY, MEMORY_AND_DISK, MEMORY_ONLY_SER, MEMORY_AND_DISK_SER, DISK_ONLY).
quelle