cache Ich baue eine generische Funktion, die eine RDD empfängt und einige Berechnungen darauf durchführt. Da ich mehr als eine Berechnung auf dem Eingabe-RDD ausführe, möchte ich es zwischenspeichern. Zum Beispiel:Was passiert, wenn ich die gleiche RDD zweimal in Spark
public JavaRDD<String> foo(JavaRDD<String> r) {
r.cache();
JavaRDD t1 = r... //Some calculations
JavaRDD t2 = r... //Other calculations
return t1.union(t2);
}
Meine Frage ist, da r
mir gegeben ist, kann es oder nicht bereits im Cache gespeichert werden kann. Wenn es zwischengespeichert wird und ich cache es wieder auf, wird Funke eine neue Schicht des Zwischenspeichers verursachen, der bedeutet, dass, während t1
und t2
berechnet werden, ich zwei Instanzen von r
im Cache haben werde? oder wird funken ist der Tatsache bewusst, dass r
zwischengespeichert ist und wird es ignorieren?
Bezüglich Ihrer Anmerkung, ist es etwas, was ich für eine frage mich, während jetzt und hat keine Aufzeichnung davon gefunden. Wenn Ihre Antwort richtig ist und der Aufrufcache nur ein Flag im RDD-Objekt ändert, warum kann ich nicht dasselbe Objekt verwenden? –
Ich werde meine Frage auf dem Zettel ein wenig erläutern. Wenn RDD "orig" genannt wurde und jemand außerhalb der Funktion "r = orig.cache();", dann habe ich im Funktionsaufruf "cached = r.cache();". Wenn das, was du sagst, wahr ist, werde ich mit den gleichen Daten enden, die zweimal im Cache gespeichert sind, einmal als "r" und einmal als "im Cache", oder? –
Sie haben Recht - ich liege falsch. Es ist nicht notwendig, den Rückgabewert "cache" zu verwenden, es wird 'this' zurückgegeben - genau RDD. –