Frage

Wir gebrauchen .cache() Auf der RDD für das anhaltende Zwischenspeichern eines Datensatzes ist mein Anliegen, wenn dieser zwischengespeicherte zwischengegangen ist?

dt = sc.parallelize([2, 3, 4, 5, 6])
dt.cache()
War es hilfreich?

Lösung

Es läuft nicht ab, bis der Spark aus dem Speicher ist. An diesem Punkt wird RDDs aus Cache entfernt, die am wenigsten häufig verwendet werden. Wenn Sie nach etwas fragen, das ungekocht wurde, berechnet es die Pipeline neu und steckt sie erneut in den Cache. Wenn dies zu teuer wäre, unpersistisch andere RDDs, leiten Sie sie überhaupt nicht durch oder bestehen Sie sie in Ihrem Dateisystem.

Andere Tipps

Zusätzlich zu Jans Antwort möchte ich darauf hinweisen, dass serialisierte RDD Speicher (/Caching) funktioniert viel besser als das normale RDD -Caching für große Datensätze.

Es hilft auch dabei, die Müllsammlung bei großen Datensätzen zu optimieren.

Zusätzlich aus den Spark -Dokumenten:

Wenn Ihre Objekte trotz dieser Abstimmung immer noch zu groß sind, um effizient zu speichern, besteht eine viel einfachere Möglichkeit, die Speicherverwendung zu reduzieren, darin, sie in serialisierten Form zu speichern, wobei die serialisierten Storagelevels in der RDD -Persistenz -API wie Memory_only_ser verwendet werden. Spark speichert dann jede RDD -Partition als ein großes Byte -Array. Der einzige Nachteil des Speichers von Daten in serialisierter Form sind langsamere Zugangszeiten, da jedes Objekt im laufenden Fliegen deserialisieren muss. Wir empfehlen dringend, Kryo zu verwenden, wenn Sie Daten in serialisierter Form zwischenspeichern möchten, da dies zu viel kleineren Größen als Java -Serialisierung führt (und sicherlich als Roh -Java -Objekte).

Spark wird den RDD oder den DataFrame automatisch nicht-persist/reinigen, wenn die RDD nicht mehr verwendet wird. Um zu überprüfen, ob eine RDD zwischengespeichert ist, überprüfen Sie bitte die Funken -Benutzeroberfläche und überprüfen Sie die Registerkarte Speicher und schauen Sie sich die Speicherdetails an.

Aus dem Terminal können Sie verwenden rdd.unpersist() oder sqlContext.uncacheTable("sparktable") So entfernen Sie die RDD oder Tabellen aus dem Speicher. Spark wurde für eine faule Bewertung gemacht, es sei denn und bis Sie eine Aktion sagen, lädt oder verarbeitet er keine Daten in den RDD oder den Datenrahmen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit datascience.stackexchange
scroll top