Vonkaccumulatoren uitgelegd: Apache Spark



In dit Apache Spark-blog worden Spark-accumulatoren in detail uitgelegd. Leer het gebruik van de Spark-accumulator met voorbeelden. Vonkaccumulatoren zijn als Hadoop Mapreduce-tellers.

Bijgedragen door Prithviraj Bose

Hier is een blog over de dingen die u moet weten over Spark-accumulatoren.Met Omdat het een sleutelvaardigheid is waar de meeste IT-recruiters naar op zoek zijn, is de groei en de vraag in de branche sinds het begin exponentieel.





Wat zijn accumulatoren?

Accumulatoren zijn variabelen die worden gebruikt om informatie over de uitvoerders te verzamelen. Deze informatie kan bijvoorbeeld betrekking hebben op gegevens of API-diagnose, zoals hoeveel records beschadigd zijn of hoe vaak een bepaalde bibliotheek-API is aangeroepen.

Laten we een klein voorbeeld bekijken om te begrijpen waarom we accumulatoren nodig hebben.



Hier is een denkbeeldig logboek van transacties van een winkelketen in de centrale regio Kolkata.

logs-Spark-accumulators

Er zijn 4 velden,

Veld 1 -> Stad



Veld 2 -> Plaats

Veld 3 -> Categorie van verkocht item

Veld 4 -> Waarde van verkocht item

De logboeken kunnen echter beschadigd zijn. De tweede regel is bijvoorbeeld een lege regel, de vierde regel rapporteert enkele netwerkproblemen en tenslotte toont de laatste regel een verkoopwaarde van nul (wat niet kan gebeuren!).

We kunnen accumulatoren gebruiken om het transactielogboek te analyseren om het aantal blanco logboeken (blanco regels) te achterhalen, het aantal keren dat het netwerk uitviel, elk product dat geen categorie heeft of zelfs het aantal keren dat er geen verkopen zijn geregistreerd. Het volledige voorbeeldlogboek is te vinden hier .
Accumulatoren zijn toepasbaar op elke operatie die,
1. Commutatief -> f (x, y) = f (y, x) , en
2. Associatief -> f (f (x, y), z) = f (f (x, z), y) = f (f (y, z), x)
Bijvoorbeeld, som en max. hoogte functies voldoen aan de bovenstaande voorwaarden terwijl gemiddelde doet niet.

Waarom Spark Accumulators gebruiken?

Waarom hebben we nu accumulatoren nodig en waarom gebruiken we niet alleen variabelen zoals weergegeven in de onderstaande code.

Het probleem met de bovenstaande code is dat wanneer de driver de variabele afdrukt blankLines de waarde is nul. Dit komt doordat wanneer Spark deze code naar elke uitvoerder verzendt, de variabelen lokaal worden voor die uitvoerder en de bijgewerkte waarde niet wordt teruggestuurd naar het stuurprogramma. Om dit probleem te voorkomen, moeten we maken blankLines een accumulator zodat alle updates van deze variabele in elke uitvoerder worden teruggestuurd naar de bestuurder. Dus de bovenstaande code moet worden geschreven als,

Dit garandeert dat de accu blankLines wordt voor elke uitvoerder bijgewerkt en de updates worden teruggestuurd naar de bestuurder.

We kunnen andere tellers implementeren voor netwerkfouten of nulverkoopwaarde, enz. De volledige broncode samen met de implementatie van de andere tellers kan worden gevonden hier .

Mensen die bekend zijn met Hadoop Map-Reduce, zullen opmerken dat de accumulatoren van Spark vergelijkbaar zijn met Hadoop's Map-Reduce-tellers.

Waarschuwingen

Bij het gebruik van accumulatoren zijn er enkele kanttekeningen waar wij als programmeurs op moeten letten,

  1. Berekeningen binnen transformaties worden lui beoordeeld, dus tenzij een actie gebeurt op de RDD het transformaties worden niet uitgevoerd. Als gevolg hiervan, accumulatoren die binnen worden gebruikt, functies zoals kaart() of filter() wordt niet uitgevoerd tenzij sommige actie gebeuren op de RDD.
  2. Spark garandeert dat accumulatoren worden bijgewerkt binnen acties slechts één keer . Dus zelfs als een taak opnieuw wordt gestart en de afstamming opnieuw wordt berekend, worden de accumulatoren slechts één keer bijgewerkt.
  3. Spark geeft hiervoor geen garantie transformaties . Dus als een taak opnieuw wordt gestart en de afstamming opnieuw wordt berekend, is er kans op ongewenste bijwerkingen wanneer de accumulatoren meer dan eens worden bijgewerkt.

Gebruik voor de zekerheid altijd accu's ALLEEN binnen acties.
De code hier toont een eenvoudig maar effectief voorbeeld om dit te bereiken.
Lees voor meer informatie over accu's deze .

Heeft u een vraag voor ons? Noem ze in het commentaargedeelte en we nemen contact met u op.

Gerelateerde berichten:

dubbel converteren naar int in java

Apache Spark combByKey uitgelegd