Spark Transformation – Perché è pigro e qual è il vantaggio?

Spark Transformations vengono valutate in modo lazy : quando chiamiamo l’azione, esegue tutte le trasformazioni basate sul grafico di lignaggio.

Qual è il vantaggio di aver valutato Transformations Lazy?

Migliorerà le performance e una minore quantità di memory consumption di memory consumption rispetto a quanto valutato con entusiasmo?

C’è qualche svantaggio nell’aver valutato la trasformazione pigra?

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 ansible 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.

Prendi in considerazione un file di registro di 1 GB in cui sono presenti messaggi di errore, di avvertenza e di informazioni ed è presente in HDFS come blocchi di 64 o 128 MB (non importa in questo contesto). Prima devi creare un RDD chiamato “input” di questo testo file. Quindi, si crea un altro RDD chiamato “errori” applicando il filtro sull’RDD “input” per recuperare solo le righe contenenti i messaggi di errore e quindi chiamare l’azione first () sul file “error” RDD. Spark ottimizzerà qui l’elaborazione del file di registro arrestandosi non appena trova la prima occorrenza di un messaggio di errore in una qualsiasi delle partizioni. Se lo stesso scenario fosse stato ripetuto con una valutazione entusiasta, Spark avrebbe filtrato tutte le partizioni del file di registro anche se si era interessati solo al primo messaggio di errore.

Da https://www.mapr.com/blog/5-minute-guide-understanding-significance-apache-spark

Valutazione pigra significa che se si dice a Spark di operare su un insieme di dati, esso ascolta ciò che gli si chiede di fare, ne scrive una scorciatoia in modo che non dimentichi, e quindi non faccia assolutamente nulla. Continuerà a non fare nulla, finché non lo chiederai per la risposta finale. […]

Aspetta fino a quando non hai finito di dargli operatori, e solo quando gli chiedi di darti la risposta definitiva lo valuta, e sembra sempre limitare il lavoro che deve fare.

Risparmia tempo e potenza di elaborazione indesiderata.