Explicación de los acumuladores de chispas: Apache Spark



Este blog de Apache Spark explica los acumuladores Spark en detalle. Aprenda el uso del acumulador Spark con ejemplos. Los acumuladores de chispas son como contadores Hadoop Mapreduce.

Contribuido por Prithviraj Bose

Aquí hay un blog sobre lo que necesita saber sobre los acumuladores Spark.Con Siendo una habilidad clave que buscan la mayoría de los reclutadores de TI, su crecimiento y demanda en la industria ha sido exponencial desde sus inicios.





¿Qué son los acumuladores?

Los acumuladores son variables que se utilizan para agregar información entre los ejecutores. Por ejemplo, esta información puede pertenecer a datos o diagnósticos de API, como cuántos registros están dañados o cuántas veces se llamó a una API de biblioteca en particular.

Para entender por qué necesitamos acumuladores, veamos un pequeño ejemplo.



Aquí hay un registro imaginario de transacciones de una cadena de tiendas en la región central de Calcuta.

logs-Spark-accumulators

Hay 4 campos,

Campo 1 -> Ciudad



Campo 2 -> Localidad

¿Qué es el acoplamiento suelto en Java?

Campo 3 -> Categoría de artículo vendido

Campo 4 -> Valor del artículo vendido

Sin embargo, los registros pueden estar dañados. Por ejemplo, la segunda línea es una línea en blanco, la cuarta línea informa algunos problemas de red y finalmente la última línea muestra un valor de venta de cero (¡lo cual no puede suceder!).

Podemos usar acumuladores para analizar el registro de transacciones para averiguar el número de registros en blanco (líneas en blanco), el número de veces que falló la red, cualquier producto que no tenga una categoría o incluso el número de veces que se registraron ventas cero. Se puede encontrar el registro de muestra completo Aquí .
Los acumuladores son aplicables a cualquier operación que sea,
1. Conmutativo -> f(x, y) = f(y, x) y
2. Asociativo -> f (f (x, y), z) = f (f (x, z), y) = f (f (y, z), x)
Por ejemplo, suma y max funciones satisfacen las condiciones anteriores mientras que promedio no.

¿Por qué utilizar acumuladores de chispas?

Ahora, ¿por qué necesitamos acumuladores y por qué no usar variables como se muestra en el código a continuación?

El problema con el código anterior es que cuando el controlador imprime la variable líneas en blanco su valor será cero. Esto se debe a que cuando Spark envía este código a cada ejecutor, las variables se vuelven locales para ese ejecutor y su valor actualizado no se retransmite al controlador. Para evitar este problema, debemos hacer líneas en blanco un acumulador tal que todas las actualizaciones de esta variable en cada ejecutor se retransmiten al controlador. Entonces, el código anterior debe escribirse como,

Esto garantiza que el acumulador líneas en blanco se actualiza en todos los ejecutores y las actualizaciones se transmiten al controlador.

Podemos implementar otros contadores para errores de red o valor de venta cero, etc. Se puede encontrar el código fuente completo junto con la implementación de los otros contadores. Aquí .

Las personas familiarizadas con Hadoop Map-Reduce notarán que los acumuladores de Spark son similares a los contadores Map-Reduce de Hadoop.

Advertencias

Al usar acumuladores, hay algunas advertencias que nosotros, como programadores, debemos tener en cuenta,

  1. Computaciones dentro transformaciones se evalúan perezosamente, por lo que a menos que un acción sucede en el RDD el transformaciones no se ejecutan. Como resultado de esto, los acumuladores utilizados dentro de funciones como mapa() o filtrar() no ser ejecutado a menos que algunos acción suceden en el RDD.
  2. Spark garantiza la actualización de los acumuladores dentro comportamiento sólo una vez . Entonces, incluso si se reinicia una tarea y se vuelve a calcular el linaje, los acumuladores se actualizarán solo una vez.
  3. Spark no garantiza esto para transformaciones . Entonces, si se reinicia una tarea y se vuelve a calcular el linaje, existen posibilidades de efectos secundarios no deseados cuando los acumuladores se actualizan más de una vez.

Para estar seguro, siempre use acumuladores dentro de acciones ÚNICAMENTE.
El código Aquí muestra un ejemplo simple pero eficaz sobre cómo lograrlo.
Para obtener más información sobre acumuladores, lea esta .

Tienes una pregunta para nosotros? Menciónalos en la sección de comentarios y nos comunicaremos contigo.

Artículos Relacionados:

convertir de doble a int

Explicación de Apache Spark combineByKey