Acumuladores do Spark explicados: Apache Spark



Este blog do Apache Spark explica os acumuladores Spark em detalhes. Aprenda o uso do acumulador Spark com exemplos. Os acumuladores de faísca são como contadores Hadoop Mapreduce.

Contribuição de Prithviraj Bose

Aqui está um blog sobre o que você precisa saber sobre os acumuladores Spark.Com sendo uma habilidade importante que a maioria dos recrutadores de TI busca, seu crescimento e demanda no setor têm sido exponenciais desde o seu início.





O que são acumuladores?

Acumuladores são variáveis ​​usadas para agregar informações entre os executores. Por exemplo, essas informações podem pertencer a dados ou diagnóstico de API, como quantos registros estão corrompidos ou quantas vezes uma determinada biblioteca API foi chamada.

Para entender por que precisamos de acumuladores, vejamos um pequeno exemplo.



Aqui está um registro imaginário das transações de uma rede de lojas na região central de Calcutá.

logs-Spark-accumulators

Existem 4 campos,

Campo 1 -> Cidade



Campo 2 -> Localidade

Campo 3 -> Categoria de item vendido

como usar goto em c ++

Campo 4 -> Valor do item vendido

No entanto, os logs podem ser corrompidos. Por exemplo, a segunda linha é uma linha em branco, a quarta linha relata alguns problemas de rede e, finalmente, a última linha mostra um valor de venda igual a zero (o que não pode acontecer!).

Podemos usar acumuladores para analisar o log de transações para descobrir o número de logs em branco (linhas em branco), o número de vezes que a rede falhou, qualquer produto que não tem uma categoria ou mesmo o número de vezes que vendas zero foram registradas. O registro de amostra completo pode ser encontrado Aqui .
Os acumuladores são aplicáveis ​​a qualquer operação que seja,
1. Comutativo -> f (x, y) = f (y, x) e
2. Associativo -> f (f (x, y), z) = f (f (x, z), y) = f (f (y, z), x)
Por exemplo, soma e max funções satisfazem as condições acima, enquanto média não.

Por que usar Acumuladores Spark?

Agora, por que precisamos de acumuladores e por que não apenas usar variáveis ​​conforme mostrado no código abaixo.

O problema com o código acima é que quando o driver imprime a variável blankLines seu valor será zero. Isso ocorre porque, quando o Spark envia esse código para cada executor, as variáveis ​​se tornam locais para aquele executor e seu valor atualizado não é retransmitido de volta para o driver. Para evitar esse problema, precisamos fazer blankLines um acumulador de forma que todas as atualizações desta variável em cada executor sejam retransmitidas para o driver. Portanto, o código acima deve ser escrito como,

Isso garante que o acumulador blankLines é atualizado em cada executor e as atualizações são retransmitidas de volta para o driver.

o que é um token java

Podemos implementar outros contadores para erros de rede ou valor de venda zero, etc. O código-fonte completo junto com a implementação dos outros contadores pode ser encontrado Aqui .

Pessoas familiarizadas com Hadoop Map-Reduce notarão que os acumuladores do Spark são semelhantes aos contadores Map-Reduce do Hadoop.

Ressalvas

Ao usar acumuladores, existem algumas ressalvas que nós, como programadores, precisamos estar cientes,

  1. Computações dentro transformações são avaliados preguiçosamente, a menos que um açao acontece no RDD o transformações não são executados. Como resultado disso, os acumuladores usados ​​dentro de funções como mapa() ou filtro() não será executado a menos que algum açao acontecer no RDD.
  2. Spark garante para atualizar acumuladores dentro ações apenas uma vez . Portanto, mesmo se uma tarefa for reiniciada e a linhagem recomputada, os acumuladores serão atualizados apenas uma vez.
  3. Spark não garante isso para transformações . Portanto, se uma tarefa for reiniciada e a linhagem for recalculada, há chances de efeitos colaterais indesejáveis ​​quando os acumuladores forem atualizados mais de uma vez.

Para estar no lado seguro, sempre use acumuladores SOMENTE dentro de ações.
O código Aqui mostra um exemplo simples, mas eficaz de como conseguir isso.
Para obter mais informações sobre acumuladores, leia isto .

Tem alguma questão para nós? Mencione-os na seção de comentários e entraremos em contato com você.

Postagens relacionadas:

Apache Spark combineByKey explicado