Обяснени искрови акумулатори: Apache Spark



Този блог на Apache Spark обяснява подробно акумулаторите на Spark. Научете използването на акумулатор Spark с примери. Акумулаторите на искри са като броячите на Hadoop Mapreduce.

Принос от Prithviraj Bose

Ето блог за нещата, които трябва да знаете за акумулаторите Spark.С тъй като е ключово умение, за което търсят повечето ИТ специалисти по подбор на персонал, растежът и търсенето му в индустрията са експоненциални от самото му създаване.





Какво представляват акумулаторите?

Акумулаторите са променливи, които се използват за обобщаване на информация между изпълнителите. Например тази информация може да се отнася до данни или диагностика на API, като например колко записи са повредени или колко пъти е извикан определен API на библиотеката.

За да разберем защо ни трябват акумулатори, нека видим малък пример.



свързан списък в програма c

Ето въображаем дневник на транзакциите на верига магазини около централния район на Калкута.

logs-Spark-accumulators

Има 4 полета,

Поле 1 -> Град



Поле 2 -> Находище

Поле 3 -> Категория на продадения артикул

Поле 4 -> Стойност на продадения артикул

Дневниците обаче могат да бъдат повредени. Например вторият ред е празен ред, четвъртият отчита някои мрежови проблеми и накрая последният ред показва нулева стойност на продажбите (което не може да се случи!).

Можем да използваме акумулатори, за да анализираме регистъра на транзакциите, за да разберем броя на празните регистрационни файлове (празни редове), броя пъти, в които мрежата се е провалила, всеки продукт, който няма категория или дори броя на нулевите продажби. Пълният примерен дневник може да бъде намерен тук .
Акумулаторите са приложими за всяка операция, която е,
1. Комутативно -> f (x, y) = f (y, x) , и
2. Асоциативно -> f (f (x, y), z) = f (f (x, z), y) = f (f (y, z), x)
Например, сума и макс функциите отговарят на горните условия, докато средно аритметично не.

масив от обекти на класа java

Защо да използвате акумулатори Spark?

Сега защо се нуждаем от акумулатори и защо не просто да използваме променливи, както е показано в кода по-долу.

Проблемът с горния код е, че когато драйверът отпечата променливата blankLines стойността му ще бъде нула. Това е така, защото когато Spark изпраща този код до всеки изпълнител, променливите стават локални за този изпълнител и неговата актуализирана стойност не се предава обратно на драйвера. За да избегнем този проблем, трябва да го направим blankLines акумулатор, така че всички актуализации на тази променлива във всеки изпълнител да се предават обратно на драйвера. Така че горният код трябва да бъде написан като,

Това гарантира, че акумулаторът blankLines се актуализира за всеки изпълнител и актуализациите се предават обратно на драйвера.

Можем да приложим други броячи за мрежови грешки или нулева стойност на продажбите и др. Пълният изходен код заедно с внедряването на другите броячи може да бъде намерен тук .

Хората, запознати с Hadoop Map-Reduce, ще забележат, че акумулаторите на Spark са подобни на броячите на Hadoop Map-Reduce.

Предупреждения

Когато използваме акумулатори, има някои предупреждения, които ние като програмисти трябва да знаем,

  1. Изчисления вътре трансформации се оценяват мързеливо, така че освен ако действие се случва на RDD на трансформации не се изпълняват. В резултат на това акумулаторите, използвани вътре в функции като карта () или филтър () няма да бъдат екзекутирани, освен ако някои действие се случват на RDD.
  2. Spark гарантира за актуализиране на акумулаторите вътре действия само веднъж . Така че дори ако задачата се рестартира и родът се преизчисли, акумулаторите ще бъдат актуализирани само веднъж.
  3. Spark не гарантира това за трансформации . Така че, ако дадена задача се рестартира и родът се преизчисли, има шанс за нежелани странични ефекти, когато акумулаторите ще бъдат актуализирани повече от веднъж.

За да бъдете сигурни, винаги използвайте САМО акумулатори вътре в действията.
Кодът тук показва прост, но ефективен пример за това как да се постигне това.
За повече информация относно акумулаторите прочетете това .

Имате въпрос към нас? Споменете ги в раздела за коментари и ние ще се свържем с вас.

Подобни публикации:

Apache Spark комбинацияByKey Обяснено