Possiamo mantenere un RDD in memoria e/o disco quando vogliamo usarlo più di una volta. Tuttavia, dobbiamo disattivarlo da noi stessi in seguito, oppure Spark fa una sorta di garbage collection e smaschera il RDD quando non è più necessario? Ho notato che se io chiamo la funzione di unpersone, ottengo prestazioni più lente.Spark potrebbe sparpagliare lo stesso RDD quando si rende conto che non verrà più utilizzato?
risposta
Sì, Apache Spark eliminerà l'RDD quando viene raccolto.
In RDD.persist
si possono vedere:
sc.cleaner.foreach(_.registerRDDForCleanup(this))
Questo mette un WeakReference alla RDD in un ReferenceQueue che porta al ContextCleaner.doCleanupRDD
quando il RDD è garbage collection. E c'è:
sc.unpersistRDD(rddId, blocking)
Per ulteriori contesto vedono ContextCleaner in generale e la commit che ha aggiunto di esso.
Un paio di cose di essere a conoscenza di quando basandosi su garbage collection per RDDs unperisting:
- Le RDDs utilizzare le risorse sul esecutori, e la raccolta dei rifiuti avviene sul driver. L'RDD non verrà automaticamente disattivato fino a quando non si avrà una pressione di memoria sufficiente sul driver, a prescindere da quanto sia pieno il disco/la memoria degli esecutori.
- Non è possibile annullare la divisione di parte di un RDD (alcune partizioni/record). Se si costruisce un RDD persistente da un altro, entrambi dovranno adattarsi interamente agli esecutori allo stesso tempo.
Se in realtà stai definendo un WeakReference sull'RDD all'interno del tuo codice, come possiamo dire che Spark lo fa quando si tratta di garbage collection? Per me stiamo chiedendo a Spark di fare per noi quando è necessario. Tuttavia, sto votando la risposta per la sua qualità anche se non sono completamente d'accordo con il 'Sì' – eliasah
Non capisco il tuo commento e credo che tu non capisca neanche il mio post :). _ "all'interno del tuo codice" _ - tutto il codice che ho collegato è all'interno di Spark. Spark fa questo automaticamente. Se si mantiene o si memorizza nella cache un RDD, questo non verrà disattivato quando RDD è GCd. –
Ma cosa succede se lo si mantiene sul disco? Siamo entrambi d'accordo sul fatto che Spark possa farlo. – eliasah
Come indicato da @Daniel, Spark rimuoverà le partizioni dalla cache. Ciò accadrà quando non ci sarà più memoria disponibile e verrà effettuato using a least-recently-used algorithm. Non è un sistema intelligente, come sottolineato da @eliasah.
Se non si memorizzano nella cache troppi oggetti, non è necessario preoccuparsene. Se metti in cache troppi oggetti, i tempi di raccolta della JVM diventeranno eccessivi, quindi in questo caso è consigliabile annullarli.
- 1. RDD Aggregate in spark
- 2. Come duplicare RDD in più RDD?
- 3. Come ottenere lo stesso tempo utilizzato dalla funzione di aggiornamento (correnteTempo :)? (prima che venga chiamato)
- 4. In che modo Spark decide come partizionare un RDD?
- 5. Implementazione di Spark RDD personalizzato in Java
- 6. Apache Spark: Come posso convertire uno Spark DataFrame in un RDD con tipo RDD [(Tipo1, Tipo2, ...)]?
- 7. Che cosa significa lo stage nei registri spark?
- 8. Apache filtro Spark RDD in due RDDs
- 9. Come si rende una UIImageView più scura quando evidenziata (toccata)?
- 10. Spark JSON campo di testo per RDD
- 11. PDO: "Numero parametro non valido" quando si sostituiscono più parametri con lo stesso valore
- 12. Come creare Spark RDD da un iteratore?
- 13. Come ottenere l'ennesima riga di Spark RDD?
- 14. Xcode rende colore diverse tonalità più scure pur utilizzando lo stesso RGB
- 15. Più thread che hanno sottoscritto lo stesso evento
- 16. Quando si esegue karma localmente, phantomjs non verrà avviato
- 17. Quale UIView viene restituito quando si utilizza -viewWithTag: quando più viste hanno lo stesso .tag?
- 18. Spark: Gruppo concat equivalente in scala RDD
- 19. Come condividere Spark RDD tra 2 contesti Spark?
- 20. Spark SQL: Convertire RDD [GenericData.Record] per dataframe
- 21. Treat Spark RDD come plain Seq
- 22. Mock a Spark RDD nei test dell'unità
- 23. Distutils Python, come ottenere un compilatore che verrà utilizzato?
- 24. UITableViewController lo scorrimento automatico si interrompe tenendo conto della tastiera quando viene visualizzato da un UISplitViewController
- 25. TabItems di TabControl che condivide lo stesso contenuto ... Non voglio
- 26. Il database non verrà rimosso quando si disinstalla l'applicazione Android
- 27. Come posso unire efficientemente un grande rdd ad una grande rdd in spark?
- 28. Che magia usa `std :: sort` internamente che lo rende molto più veloce?
- 29. jQuery seleziona change event quando si seleziona lo stesso valore
- 30. Windows Batch si sposta nella directory che potrebbe non esistere
Se si memorizza nella cache un RDD, è necessario annullarlo! – eliasah
@eliasah cosa succede se la memoria è piena? Non scintilla non separare i RDD in modo LRU. – None
No, non è così. Spark non è un sistema di cache. Potresti prendere in considerazione l'utilizzo e la cache esterna, oppure vuoi persistere su disco e su ram. Tuttavia, se non c'è spazio sul disco, si otterrà uno spazio non disponibile sull'errore del dispositivo. – eliasah