Acumulatori de scânteie explicați: Apache Spark



Acest blog Apache Spark explică în detaliu acumulatorii Spark. Aflați cum se folosește acumulatorul de scânteie cu exemple. Acumulatoarele de scânteie sunt precum contoare Hadoop Mapreduce.

Contribuție de Prithviraj Bose

Iată un blog despre lucrurile pe care trebuie să le cunoașteți despre acumulatorii Spark.Cu fiind o abilitate cheie pe care o caută majoritatea recrutorilor IT, creșterea și cererea sa în industrie a fost exponențială de la începuturile sale.





Ce sunt acumulatorii?

Acumulatorii sunt variabile care sunt utilizate pentru agregarea informațiilor între executanți. De exemplu, aceste informații se pot referi la datele sau diagnosticarea API, cum ar fi câte înregistrări sunt corupte sau de câte ori a fost apelată o anumită bibliotecă API.

Pentru a înțelege de ce avem nevoie de acumulatori, să vedem un mic exemplu.



Iată un jurnal imaginar al tranzacțiilor unui lanț de magazine din regiunea centrală Kolkata.

java cum se termină un program
logs-Spark-accumulators

Există 4 câmpuri,

Câmpul 1 -> Oraș



Câmpul 2 -> Localitate

Câmpul 3 -> Categoria articolului vândut

Câmpul 4 -> Valoarea articolului vândut

Cu toate acestea, jurnalele pot fi corupte. De exemplu, a doua linie este o linie goală, a patra linie raportează unele probleme de rețea și în cele din urmă ultima linie arată o valoare de vânzare zero (ceea ce nu se poate întâmpla!).

Putem folosi acumulatori pentru a analiza jurnalul de tranzacții pentru a afla numărul de jurnale goale (linii goale), numărul de eșecuri ale rețelei, orice produs care nu are o categorie sau chiar numărul de vânzări zero. Jurnalul complet al eșantionului poate fi găsit Aici .
Acumulatorii se aplică oricărei operațiuni care sunt,
1. Comutativ -> f (x, y) = f (y, x) , și
2. Asociativ -> f (f (x, y), z) = f (f (x, z), y) = f (f (y, z), x)
De exemplu, sumă și max funcțiile îndeplinesc condițiile de mai sus întrucât in medie nu.

fibonacci iterativ c ++

De ce să folosiți acumulatori de scânteie?

Acum, de ce avem nevoie de acumulatori și de ce nu folosim doar variabile așa cum se arată în codul de mai jos.

Problema cu codul de mai sus este că atunci când driverul imprimă variabila blankLines valoarea sa va fi zero. Acest lucru se datorează faptului că atunci când Spark expediază acest cod către fiecare executant, variabilele devin locale pentru acel executor și valoarea sa actualizată nu este retransmisă la driver. Pentru a evita această problemă trebuie să facem blankLines un acumulator astfel încât toate actualizările acestei variabile în fiecare executant să fie retransmise înapoi la driver. Deci, codul de mai sus ar trebui să fie scris ca:

Acest lucru garantează că acumulatorul blankLines este actualizat la fiecare executant și actualizările sunt transmise înapoi la driver.

șir divizat mai mulți delimitatori java

Putem implementa alte contoare pentru erori de rețea sau valoare de vânzare zero, etc. Codul sursă complet împreună cu implementarea celorlalte contoare pot fi găsite Aici .

Oamenii familiarizați cu Hadoop Map-Reduce vor observa că acumulatorii Spark sunt similari contoarelor Hadoop Map-Reduce.

Avertismente

Când folosiți acumulatori, există câteva avertismente pe care noi, programatorii, trebuie să le conștientizăm,

  1. Calcule în interior transformări sunt evaluate leneș, deci dacă nu acțiune se întâmplă pe RDD transformări nu sunt executate. Ca rezultat al acestui fapt, acumulatorii au folosit în interior funcții cum ar fi Hartă() sau filtru() nu va fi executat decât dacă unii acțiune se întâmplă pe RDD.
  2. Spark garantează actualizarea acumulatorilor interior acțiuni doar o data . Deci, chiar dacă o sarcină este repornită și descendența este recalculată, acumulatorii vor fi actualizați o singură dată.
  3. Spark nu garantează acest lucru pentru transformări . Deci, dacă o sarcină este repornită și descendența este recalculată, există șanse de efecte secundare nedorite atunci când acumulatorii vor fi actualizați de mai multe ori.

Pentru a fi în siguranță, folosiți întotdeauna acumulatori DOAR în acțiuni.
Codul Aici prezintă un exemplu simplu, dar eficient, despre cum să realizăm acest lucru.
Pentru mai multe informații despre acumulatori, citiți acest .

Ai o întrebare pentru noi? Menționați-le în secțiunea de comentarii și vă vom răspunde.

Postări asemănatoare:

Explicați Apache Spark combineByKey