Spiegazione degli accumulatori Spark: Apache Spark



Questo blog di Apache Spark spiega in dettaglio gli accumulatori Spark. Impara l'utilizzo dell'accumulatore Spark con esempi. Gli accumulatori Spark sono come i contatori Mapreduce di Hadoop.

Contributo di Prithviraj Bose

Ecco un blog sulle cose che devi sapere sugli accumulatori Spark.Con essendo un'abilità chiave che la maggior parte dei reclutatori IT cerca, la sua crescita e la sua domanda nel settore sono state esponenziali sin dal suo inizio.





Cosa sono gli accumulatori?

Gli accumulatori sono variabili utilizzate per aggregare le informazioni tra gli esecutori. Ad esempio, queste informazioni possono riguardare dati o diagnosi API come il numero di record danneggiati o quante volte è stata chiamata una particolare API della libreria.

Per capire perché abbiamo bisogno di accumulatori, vediamo un piccolo esempio.



Ecco un registro immaginario delle transazioni di una catena di negozi nella regione centrale di Calcutta.

logs-Spark-accumulators

Ci sono 4 campi,

Campo 1 -> Città



Campo 2 -> Località

Campo 3 -> Categoria dell'articolo venduto

Campo 4 -> Valore dell'articolo venduto

Tuttavia, i registri possono essere danneggiati. Ad esempio, la seconda riga è una riga vuota, la quarta riga segnala alcuni problemi di rete e infine l'ultima riga mostra un valore di vendita pari a zero (cosa che non può accadere!).

come creare un jframe

Possiamo utilizzare gli accumulatori per analizzare il registro delle transazioni per scoprire il numero di registri vuoti (righe vuote), il numero di volte in cui la rete si è guastata, qualsiasi prodotto che non ha una categoria o anche il numero di volte in cui sono state registrate vendite zero. È possibile trovare il registro di esempio completo Qui .
Gli accumulatori sono applicabili a qualsiasi operazione che sia,
1. Commutativo -> f (x, y) = f (y, x) , e
2. Associativo -> f (f (x, y), z) = f (f (x, z), y) = f (f (y, z), x)
Per esempio, somma e max le funzioni soddisfano le condizioni di cui sopra mentre media non.

Perché utilizzare gli accumulatori Spark?

Ora perché abbiamo bisogno di accumulatori e perché non usare solo le variabili come mostrato nel codice seguente.

da decimale a codice binario Python
Il problema con il codice precedente è che quando il driver stampa la variabile blankLines il suo valore sarà zero. Questo perché quando Spark invia questo codice a ogni esecutore, le variabili diventano locali per quell'esecutore e il suo valore aggiornato non viene ritrasmesso al driver. Per evitare questo problema dobbiamo fare blankLines un accumulatore tale che tutti gli aggiornamenti a questa variabile in ogni esecutore vengano ritrasmessi al driver. Quindi il codice sopra dovrebbe essere scritto come,

Questo garantisce che l'accumulatore blankLines viene aggiornato in ogni esecutore e gli aggiornamenti vengono ritrasmessi al driver.

Possiamo implementare altri contatori per errori di rete o valore di vendita zero, ecc. È possibile trovare il codice sorgente completo insieme all'implementazione degli altri contatori Qui .

Le persone che hanno familiarità con Hadoop Map-Reduce noteranno che gli accumulatori di Spark sono simili ai contatori Map-Reduce di Hadoop.

Avvertenze

Quando si usano gli accumulatori ci sono alcune avvertenze di cui noi programmatori dobbiamo essere consapevoli,

  1. Calcoli interni trasformazioni vengono valutati pigramente, quindi a meno che un azione succede su RDD il trasformazioni non vengono eseguiti. Di conseguenza, gli accumulatori utilizzati all'interno di funzioni come carta geografica() o filtro() non verrà eseguito a meno che alcuni azione accadere su RDD.
  2. Spark garantisce l'aggiornamento degli accumulatori dentro Azioni solo una volta . Quindi, anche se un'attività viene riavviata e la derivazione viene ricalcolata, gli accumulatori verranno aggiornati solo una volta.
  3. Spark non garantisce questo per trasformazioni . Quindi, se un'attività viene riavviata e il lignaggio viene ricalcolato, ci sono possibilità di effetti collaterali indesiderati quando gli accumulatori verranno aggiornati più di una volta.

Per essere sicuri, utilizzare sempre gli accumulatori SOLO all'interno delle azioni.
Il codice Qui mostra un esempio semplice ma efficace su come ottenere ciò.
Per ulteriori informazioni sugli accumulatori, leggi Questo .

Hai domande per noi? Menzionali nella sezione commenti e ti risponderemo.

Post correlati:

Spiegazione di Apache Spark CombinaByKey