Per le trasformazioni, Spark le aggiunge a un DAG di calcolo e solo quando il driver richiede alcuni dati, questo DAG viene effettivamente eseguito.
Un vantaggio di questo è che Spark può prendere molte decisioni di ottimizzazione dopo aver avuto la possibilità di esaminare il DAG nella sua interezza. Questo non sarebbe possibile se eseguisse tutto appena l'ha ottenuto.
Ad esempio: se esegui ogni trasformazione con impazienza, che cosa significa? Beh, significa che dovrai materializzare tutti i tanti set di dati intermedi nella memoria. Questo evidentemente non è efficiente, per esempio aumenterà i costi del GC. (Perché in realtà non ti interessano questi risultati intermedi in quanto tali: sono solo astrazioni convettive per te mentre scrivi il programma.) Quindi, invece, quello che fai è - dici a Spark quale è la risposta finale che ti interessa e trova il modo migliore per arrivarci.
fonte
2016-06-25 12:09:58