Közreműködött: Prithviraj Bose
Itt van egy blog azokról a dolgokról, amelyeket tudnia kell a Spark akkumulátorokról.Val vel mivel kulcsfontosságú készség, amelyre a legtöbb informatikai toborzó vadászik, növekedése és kereslete az iparban megalakulása óta exponenciális.
Mik azok az akkumulátorok?
Az akkumulátorok olyan változók, amelyeket a végrehajtók közötti információk összesítésére használnak. Ez az információ például adatokra vagy API-diagnózisra vonatkozhat, például hány rekord sérült, vagy hányszor hívták meg az adott könyvtár API-t.
Lássunk egy kis példát, hogy megértsük, miért van szükségünk akkumulátorokra.
linkelt lista a c programban
Itt van egy képzeletbeli napló a központi Kolkata régió körüli üzletlánc tranzakcióiról.
4 mező van,
1. mező -> Város
2. mező -> Helység
3. mező -> Az eladott cikk kategóriája
4. mező -> Az eladott tétel értéke
A naplók azonban megsérülhetnek. Például a második sor üres sor, a negyedik sor néhány hálózati problémáról számol be, végül az utolsó sor nulla értékesítési értéket mutat (ami nem történhet meg!).
Az akkumulátorok segítségével elemezhetjük a tranzakciós naplót, hogy megtudjuk az üres naplók (üres sorok) számát, a hálózat meghibásodásának számát, bármely olyan terméket, amelynek nincs kategóriája, vagy akár a nullás eladások számát. A teljes naplóminta megtalálható itt .
Az akkumulátorok minden olyan műveletre alkalmazhatók,
1. Kommutatív -> f (x, y) = f (y, x) , és
2. Asszociatív -> f (f (x, y), z) = f (f (x, z), y) = f (f (y, z), x)
Például, összeg és max funkciók megfelelnek a fenti feltételeknek, míg átlagos nem.
mi a javascript módszer
Miért érdemes használni a Spark akkumulátorokat?
Most miért van szükségünk akkumulátorokra, és miért nem csak az alábbi kódban bemutatott változókat használjuk?
A fenti kóddal az a probléma, hogy amikor az illesztőprogram kinyomtatja a változót blankLines értéke nulla lesz. Ennek az az oka, hogy amikor a Spark ezt a kódot minden végrehajtóhoz eljuttatja, akkor a változók lokálissá válnak az adott végrehajtó számára, és a frissített értéke nem kerül vissza az illesztőprogramba. A probléma elkerülése érdekében meg kell tennünk blankLines egy olyan akkumulátort, amely a változó összes frissítését minden végrehajtóban visszaadja az illesztőprogramnak. Tehát a fenti kódot úgy kell írni,Ez garantálja, hogy az akkumulátor blankLines minden végrehajtón frissül, és a frissítéseket visszaküldik az illesztőprogramnak.
Más számlálókat is megvalósíthatunk hálózati hibák vagy nulla értékesítési érték stb. Esetén. A teljes forráskód a többi számláló megvalósításával együtt megtalálható itt .
A Hadoop Map-Reduce-t ismerő emberek észreveszik, hogy a Spark akkumulátorai hasonlóak a Hadoop Map-Reduce számlálóihoz.
Figyelmeztetések
Az akkumulátorok használatakor vannak olyan figyelmeztetések, amelyekkel nekünk, programozóknak tisztában kell lennünk,
- Számítások belül átalakulások lustán értékeljük, tehát ha egy akció az RDD-n történik átalakulások nem hajtják végre. Ennek eredményeként a belső akkumulátorok olyan funkciókkal rendelkeznek, mint a térkép() vagy szűrő() kivégzik, hacsak nem akció az RDD-n történnek.
- A Spark garantálja az akkumulátorok frissítését belül cselekvések csak egyszer . Tehát akkor is, ha egy feladatot újraindítanak, és a vonalat újraszámítják, az akkumulátorok csak egyszer frissülnek.
- A Spark ezt nem garantálja átalakulások . Tehát, ha egy feladatot újraindítanak, és a vonalat újraszámítják, akkor fennáll a nemkívánatos mellékhatások esélye, amikor az akkumulátorokat többször frissítik.
A biztonság kedvéért mindig CSAK a műveletek során használjon akkumulátorokat.
A kód itt egyszerű, de hatékony példát mutat be ennek elérésére.
Az akkumulátorokkal kapcsolatos további információkért olvassa el ez .
Van egy kérdésünk? Említse meg őket a megjegyzés rovatban, és kapcsolatba lépünk Önnel.
Kapcsolódó hozzászólások: