Objašnjeni akumulatori iskri: Apache iskra

Ovaj Apache Spark blog detaljno objašnjava Spark akumulatore. Na primjerima naučite upotrebu akumulatora Spark. Akumulatori iskre su poput brojača Hadoop Mapreduce.

Doprinos Prithviraj Bose

Evo bloga o stvarima koje trebate znati o akumulatorima Spark.S Budući da je ključna vještina za kojom lovi većina IT regrutera, njezin rast i potražnja u industriji eksponencijalni su od njezina osnutka.





Što su akumulatori?

Akumulatori su varijable koje se koriste za agregiranje podataka među izvršiteljima. Na primjer, ove se informacije mogu odnositi na podatke ili dijagnozu API-ja, poput broja zapisa koji su oštećeni ili koliko je puta pozvan određeni API knjižnice.

Da bismo razumjeli zašto su nam potrebni akumulatori, pogledajmo mali primjer.



koja su ograničenja u sql-u

Evo izmišljenog dnevnika transakcija lanca trgovina oko središnje regije Kolkata.

logs-Spark-accumulators

Postoje 4 polja,

Polje 1 -> Grad



Polje 2 -> Lokalitet

Polje 3 -> Kategorija prodane jedinice

Polje 4 -> Vrijednost prodane jedinice

Međutim, dnevnici mogu biti oštećeni. Na primjer, drugi je redak prazan, četvrti redak izvještava o mrežnim problemima i na kraju posljednji redak prikazuje prodajnu vrijednost od nule (što se ne može dogoditi!).

Pomoću akumulatora možemo analizirati dnevnik transakcija kako bismo saznali broj praznih dnevnika (praznih redaka), broj otkaza mreže, bilo koji proizvod koji nema kategoriju ili čak broj puta zabilježenih nula prodaja. Cijeli uzorak dnevnika možete pronaći ovdje .
Akumulatori su primjenjivi na bilo koji postupak koji je,
1. Komutativno -> f (x, y) = f (y, x) , i
2. Asocijativni -> f (f (x, y), z) = f (f (x, z), y) = f (f (y, z), x)
Na primjer, iznos i maks funkcije zadovoljavaju gornje uvjete dok prosječno ne.

Zašto koristiti Spark akumulatore?

Zašto su nam sada potrebni akumulatori i zašto jednostavno ne koristimo varijable kao što je prikazano u donjem kodu.

kako deklarirati niz objekata u javi
Problem s gornjim kodom je taj što kada upravljački program ispiše varijablu blankLines njegova će vrijednost biti nula. To je zato što kad Spark ovaj kod isporuči svakom izvršitelju, varijable postaju lokalne za tog izvršitelja i njegova ažurirana vrijednost ne vraća se natrag upravljačkom programu. Da bismo izbjegli ovaj problem moramo napraviti blankLines akumulator takav da se sva ažuriranja ove varijable u svakom izvršitelju prenose natrag vozaču. Dakle, gornji kod bi trebao biti napisan kao,

To jamči da akumulator blankLines se ažurira kod svakog izvršitelja i ažuriranja se prenose natrag vozaču.

podići broj na stepen u javi

Možemo implementirati druge brojače za mrežne pogreške ili nultu prodajnu vrijednost itd. Puni izvorni kod zajedno s implementacijom ostalih brojača možemo pronaći ovdje .

Ljudi upoznati s Hadoop Map-Reduce primijetit će da su Sparkovi akumulatori slični Hadoopovim Brojačima Map-Reduce.

Upozorenja

Kada koristimo akumulatore, postoje neka upozorenja kojih moramo biti svjesni kao programeri,

  1. Računanja iznutra transformacije ocjenjuju se lijeno, pa osim ako akcijski događa na RDD-u transformacije nisu izvršeni. Kao rezultat toga, akumulatori koji se koriste unutar funkcija poput karta() ili filtar() neće se pogubiti ako neki akcijski dogoditi se na RDD-u.
  2. Spark garantira ažuriranje akumulatora iznutra radnje samo jednom . Dakle, čak i ako se zadatak ponovno pokrene i loza ponovno izračuna, akumulatori će se ažurirati samo jednom.
  3. Spark to ne jamči za transformacije . Dakle, ako se zadatak ponovno pokrene i linija ponovo izračuna, postoje šanse za neželjene nuspojave kada se akumulatori ažuriraju više puta.

Da biste bili na sigurnoj strani, uvijek koristite SAMO akumulatore unutar radnji.
Kod ovdje pokazuje jednostavan, ali učinkovit primjer kako to postići.
Za više informacija o akumulatorima pročitajte ovaj .

Imate pitanje za nas? Spomenite ih u odjeljku za komentare i javit ćemo vam se.

Vezane objave:

Objašnjenje Apache SparkByKey