Quando scade la cache per un RDD in pyspark?


10

Usiamo .cache()su RDD per la memorizzazione nella cache persistente di un set di dati, la mia preoccupazione è quando questa cache sarà scaduta ?.

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

Risposte:


12

Non scadrà fino a quando Spark non ha esaurito la memoria, a quel punto rimuoverà gli RDD dalla cache che vengono utilizzati meno spesso. Quando chiedi qualcosa che è stato staccato, ricalcola la pipeline e la rimette nella cache. Se questo sarebbe troppo costoso, non rispondere ad altri RDD, non memorizzarli nella cache in primo luogo o persistere sul tuo file system.


6

Oltre alla risposta di Jan, vorrei sottolineare che l' archiviazione RDD serializzata (/ cache) funziona molto meglio della normale memorizzazione nella cache RDD per set di dati di grandi dimensioni .

Aiuta anche a ottimizzare la garbage collection, in caso di set di dati di grandi dimensioni.

Inoltre, dai documenti spark:

Quando i tuoi oggetti sono ancora troppo grandi per essere archiviati in modo efficiente nonostante questa ottimizzazione, un modo molto più semplice per ridurre l'utilizzo della memoria consiste nel memorizzarli in forma serializzata, utilizzando gli StorageLevels serializzati nell'API di persistenza RDD, come MEMORY_ONLY_SER. Spark memorizzerà quindi ogni partizione RDD come un array di byte di grandi dimensioni. L'unico aspetto negativo della memorizzazione dei dati in forma serializzata sono i tempi di accesso più lenti, a causa della necessità di deserializzare al volo ogni oggetto. Si consiglia vivamente di utilizzare Kryo se si desidera memorizzare nella cache i dati in forma serializzata, poiché porta a dimensioni molto inferiori rispetto alla serializzazione Java (e certamente rispetto agli oggetti Java grezzi).


Solo una nota: MEMORY_ONLY_SERè disponibile solo in Scala / Java, non in Python.
Def_Os

1

Spark disattiverà / pulirà automaticamente RDD o Dataframe se RDD non viene più utilizzato. Per verificare se un RDD è memorizzato nella cache, controllare nell'interfaccia utente Spark e controllare la scheda Archiviazione e esaminare i dettagli della memoria.

Dal terminale, è possibile utilizzare rdd.unpersist()o sqlContext.uncacheTable("sparktable")per rimuovere il RDD o le tabelle dalla memoria. Spark creato per Lazy Evaluation, a meno che e fino a quando non si pronuncia un'azione, non carica o elabora alcun dato nel RDD o DataFrame.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.