sábado, 14 de noviembre de 2015

Apache Spark - Programacion Avanzada

Spark contiene dos tipos diferentes de variables compartidas - uno estávariables de difusión y la segunda es acumuladores.
  • Difusión de variables - se utiliza de manera eficiente, distribuir grandes valores.
  • Acumuladores - se utiliza para agregar la información de la colección particular.

Variables de difusión

Broadcast variables que permiten al programador a mantener una única lectura en caché variable sobre cada máquina en lugar de enviar una copia del mismo con las tareas. Se pueden utilizar, por ejemplo, para dar a cada nodo, una copia de un gran conjunto de datos de entrada, de una manera eficiente. Spark también intenta distribuir las variables de transmisión utilizando algoritmos de transmisión eficientes para reducir los costos de comunicación.
Spark acciones se ejecutan a través de una serie de etapas, separadas por operaciones de "shuffle" distribuidos. Spark transmite automáticamente los datos comunes necesarios para las tareas dentro de cada etapa.
Los datos difundidos este modo se almacenan en caché en forma serializada y se deserializa antes de ejecutar cada tarea. Esto significa que crear explícitamente las variables de difusión, sólo es útil cuando las tareas a través de múltiples etapas necesitan los mismos datos o cuando el almacenamiento en caché los datos en forma deserializado es importante.
Las variables de difusión se crean a partir de una variable v llamandoSparkContext.broadcast (v). La variable de difusión es una envoltura alrededor de v, y su valor se puede acceder llamando al valor de método.El código que figura a continuación muestra esta -
scala> val broadcastVar = sc.broadcast(Array(1, 2, 3))
Salida -
broadcastVar: org.apache.spark.broadcast.Broadcast[Array[Int]] = Broadcast(0)
Después se crea la variable de emisión, que debe ser usado en lugar del valor ven cualquiera de las funciones se ejecutan en el cluster, de modo que v no es enviado a los nodos más de una vez. Además, el objeto v no debe ser modificado después de su emisión, a fin de garantizar que todos los nodos reciben el mismo valor de la variable de emisión.

Acumuladores

Acumuladores son variables que sólo se "agregan" a través de una operación asociativa y, por consiguiente, ser apoyadas de manera eficiente en paralelo.Pueden ser utilizados para implementar contadores (como en MapReduce) o sumas. Spark soporta de forma nativa los acumuladores de los tipos numéricos, y los programadores pueden añadir soporte para nuevos tipos. Si los acumuladores se crean con un nombre, que se mostrarán en la interfaz de usuario del Spark. Esto puede ser útil para entender el progreso de correr etapas (NOTA - esto todavía no se admite en Python).
Un acumulador se crea a partir de un valor inicial v llamandoSparkContext.accumulator (v). Las tareas que se ejecutan en el clúster pueden entonces agregar a ella mediante el complemento método o el operador + = (en Scala y Python). Sin embargo, no pueden leer su valor. Sólo el programa piloto puede leer el valor del acumulador, utilizando su valor demétodo.
El código que figura a continuación muestra un acumulador que se utiliza para sumar los elementos de una matriz -
scala> val accum = sc.accumulator(0) 

scala
> sc.parallelize(Array(1, 2, 3, 4)).foreach(x => accum += x)
Si quieres ver la salida del código anterior y luego use el siguiente comando -
scala> accum.value 

Producción

res2: Int = 10 

Operaciones RDD numéricos

Spark le permite hacer diferentes operaciones en datos numéricos, utilizando uno de los métodos de la API predefinidos. Operaciones numéricas del Spark se implementan con un algoritmo de streaming que permite construir el modelo, un elemento a la vez.
Estas operaciones se calculan y se devuelven como StatusCounter objeto llamando estado () método.
La siguiente es una lista de los métodos numéricos disponibles enStatusCounter.
S.NoMétodos y Significado
1
count ()
Número de elementos de la RDD.
2
Media()
Media de los elementos de la RDD.
3
Suma()
Valor total de los elementos de la RDD.
4
Max ()
El valor máximo entre todos los elementos de la RDD.
5
Min ()
El valor mínimo entre todos los elementos de la RDD.
6
Diferencia()
Varianza de los elementos.
7
STDEV ()
Desviacion estandar.
Si desea utilizar sólo uno de estos métodos, puede llamar al método correspondiente directamente en DDR.

No hay comentarios.:

Publicar un comentario