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



В этом блоге Apache Spark подробно описаны аккумуляторы Spark. Изучите использование аккумулятора Spark на примерах. Аккумуляторы Spark похожи на счетчики Hadoop Mapreduce.

Предоставлено Притхвираджем Босом

Вот блог о том, что вам нужно знать об аккумуляторах Spark.С участием Поскольку это ключевой навык, за которым охотятся большинство ИТ-рекрутеров, его рост и спрос в отрасли с момента его создания были экспоненциальными.





Что такое аккумуляторы?

Аккумуляторы - это переменные, которые используются для агрегирования информации по исполнителям. Например, эта информация может относиться к данным или диагностике API, например, сколько записей повреждено или сколько раз вызывалась конкретная библиотека API.

Чтобы понять, зачем нам аккумуляторы, рассмотрим небольшой пример.



Вот воображаемый журнал транзакций сети магазинов в центральном регионе Калькутты.

logs-Spark-accumulators

Есть 4 поля,

Поле 1 -> Город



Поле 2 -> Населенный пункт

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

Поле 4 -> Стоимость проданного товара

Однако журналы могут быть повреждены. Например, вторая строка представляет собой пустую строку, четвертая строка сообщает о некоторых сетевых проблемах и, наконец, последняя строка показывает нулевое значение продаж (чего не может быть!).

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

Зачем использовать искровые аккумуляторы?

Теперь зачем нам аккумуляторы и почему бы просто не использовать переменные, как показано в приведенном ниже коде.

Проблема с приведенным выше кодом заключается в том, что когда драйвер печатает переменную blankLines его значение будет равно нулю. Это связано с тем, что когда Spark отправляет этот код каждому исполнителю, переменные становятся локальными для этого исполнителя, и его обновленное значение не передается обратно драйверу. Чтобы избежать этой проблемы, нам нужно сделать blankLines аккумулятор, так что все обновления этой переменной в каждом исполнителе передаются обратно драйверу. Таким образом, приведенный выше код должен быть записан как,

Это гарантирует, что аккумулятор blankLines обновляется для каждого исполнителя, и обновления ретранслируются обратно в драйвер.

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

периодическая таблица инструментов DevOps

Люди, знакомые с Hadoop Map-Reduce, заметят, что аккумуляторы Spark похожи на счетчики Hadoop Map-Reduce.

Предостережения

При использовании аккумуляторов есть некоторые предостережения, о которых мы, программисты, должны знать.

  1. Вычисления внутри трансформации оцениваются лениво, поэтому, если действие происходит на СДР трансформации не выполняются. В результате аккумуляторы используются внутри таких функций, как карта() или фильтр() не будет казнен, если некоторые действие происходит на СДР.
  2. Spark гарантирует обновление аккумуляторов внутри действия только один раз . Таким образом, даже если задача перезапущена и родословная пересчитана, аккумуляторы будут обновлены только один раз.
  3. Spark не гарантирует этого для трансформации . Таким образом, если задача перезапущена и происхождение пересчитано, есть вероятность нежелательных побочных эффектов, когда аккумуляторы будут обновляться более одного раза.

На всякий случай всегда используйте ТОЛЬКО аккумуляторы внутри действий.
Код Вот показывает простой, но эффективный пример того, как этого добиться.
Подробнее об аккумуляторах читайте этот .

Есть вопрос к нам? Упомяните их в разделе комментариев, и мы свяжемся с вами.

Похожие сообщения:

Объяснение комбайна Apache SparkByKey