Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Nh Spark Python 2020

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 137

Analítica con Spark y

Python

Ing. Héctor Aníbal Saravia Chong


julio 2020
• Limpieza de datos y análisis de datos exploratorios.
• Extracción y transformación de características utilizando
MLlib.
TEMARIO • MLlib Pipelines: Transformadores y Estimadores.
• Modelo Paralelo vs Datos Paralelo.
• Regresión lineal, árboles de decisión, random forests y
clustering.
• Herramienta para rastrear los resultados del modelo.
• Debug y DAG de procesos Spark.
• Tuning y buenas prácticas.
Analítica con Spark y Python

• Python es un lenguaje de programación de alto nivel, famoso por su


claridad de sintaxis y código.
• Spark es un motor de procesamiento de datos utilizado para consultar,
analizar y transformar grandes volúmenes de datos.
• PySpark permite a los usuarios interactuar con Spark y Python.
En esta capacitación dirigida por el instructor, los participantes aprenderán
a usar Python y Spark juntos para analizar los datos.
• ¿Cuál es la diferencia entre Spark ML y los paquetes MLLIB?
• Spark Mllib .- spark.mllib contiene la API heredada construida sobre RDD.
• Spark ML .- spark.ml proporciona una API de nivel superior construida
sobre DataFrames para construir un “Pipeline” o “workflow” de ML.
Analítica con Spark y Python
Apache Spark
Apache Spark es un framework de programación para procesamiento de datos
distribuidos, diseñado para ser rápido y de propósito general. Como su propio
nombre indica, ha sido desarrollada en el marco del proyecto Apache, lo que
garantiza su licencia Open Source.

Tiene gran flexibilidad e interconexión con otros módulos de Apache como


Hadoop, Hive o Kafka. Apache Spark consta de diferentes APIs y módulos que
permiten que sea utilizado por una gran variedad de profesionales en todas las
etapas del ciclo de vida del dato.

Apache Spark es un motor de procesamiento distribuido responsable de


orquestar, distribuir y monitorizar aplicaciones que constan de múltiples tareas
de procesamiento de datos sobre varias máquinas de trabajo, que forman un
cluster.
Aplicaciones de Spark

Todas las aplicaciones de Spark consisten en una aplicación que ejecutan una
función principal y varias operaciones encadenadas. El principal concepto del Spark
lo proporciona un RDD (Resilent Distributed Dataset) que es una abstracción
referida a una colección de elementos particionados a través de los nodos de un
cluster para operar en paralelo.

Los RDDs son creados en cada ejecución mediante la lectura de ficheros de HDFS o
de algún otro sistema de archivos compatibles, que son transformables en otros
RDDs, pueden persistir en la memoria RAM para ejecutar las operaciones de forma
más eficiente y es tolerante a los errores.
Aplicaciones de Spark

Lo primero que se tiene que hacer al crear una aplicación de Spark es crear el objeto
SparkContext el cual indica al Spark como es que va acceder al cluster.

En la creación del SparkContext se puede indicar la configuración de la aplicación


mediante el objeto SparkConf:
• Señalar el Nombre de la aplicación
• El Maestro (Modo local o cluster)
• Las Librerías

Spark dispone de varias consolas para interpretar las operaciones:


• spark-shell, consola para operar con el lenguaje scala
• pyspark, consola para operar con el lenguaje python
• sparkR, consola para operar con el lenguaje R
Analítica con Spark y Python
5V’s

Volumen
La cantidad de información que se almacena es cada vez mayor, y sigue creciendo, este, es el principal valor
del Big Data. Se procesan cada vez más datos y de múltiples fuentes o maneras.
2
Velocidad
Los datos se pueden tratar de manera inmediata y los podemos interpretar casi en tiempo real. Si somos
capaces de analizarlos de manera rápida crearemos un valor de negocio y haremos que no se pierda la
oportunidad.
3
Variedad
La gran variedad de formas en las que llega la información provoca que haya datos estructurados,
semiestructurados y no estructurados. Lo que conlleva a ser conscientes de la importancia que tiene el ser
capaz de interpretar esos datos.
4
Veracidad
Esta es una de las características más importantes del Big Data, ya que al haber tanta información lo difícil es
saber controlar su veracidad. La incertidumbre sobre la veracidad de los datos puede provocar dudas sobre su
calidad. Separar el trigo de la paja puede ser todo un reto que nos dará grandes oportunidades.
4
Valor
Hablamos del valor que generan los datos. Con este valor, las empresas tienen la oportunidad de sacar el
máximo partido a los datos para definir estrategias más óptimas
8V’s
8V’s
Big Data
Big Data y Machine Learning (ML)
Big Data y Machine Learning (ML)
BIG DATA Analitycs
Analítica con Spark y Python
Analítica con Spark y Python

La figura representa cómo el dato fluye desde la generación y recolección,


pasa por la agregación e integración y termina en las aplicaciones analíticas.
¿Los procesos de almacenamiento y computación no son realmente necesarios ?
Por que la información podría fluir de una paso al siguiente de forma directa
Analítica con Spark y Python
Analítica con Spark y Python
TEMA 1: Limpieza de datos y análisis de datos exploratorios.
Limpieza de datos con Apache Spark

Limpiar datos es una tarea rutinaria que es la más lenta y menos divertida de los
analistas de datos, pero es una de las más importantes. Ya que nadie puede iniciar un
proyecto de ciencia de datos, aprendizaje automático o una solución basada en datos
sin estar seguro de que los datos que van a ingestar o consumir son de calidad o están
en buen estado ya que de ellos deben ser precisos, actualizados, lo más completos
posible y no deben contener entradas duplicadas. Los datos limpios permiten buenos
resultados y tomar mejores decisiones.

Es por esta razón que todos los enfoques basados en datos deben limpiar, resolver,
normalizar y corregir los datos que se introducirán en los modelos que se requieren
crear.
Análisis exploratorio de datos con Apache
Spark
Las técnicas de estadística descriptiva son clave en el proceso de análisis exploratorio datos
y son previos al entrenamiento de algoritmos de Machine Learning. Así como para la
creación o construcción de modelos de aprendizaje automático y está orientado a
comprender los datos.
En el Análisis exploratorio de datos (EDA) se exploran los datos mediante las técnicas de la
estadística y la visualización. El primer paso es mirar o visualizar una gráfica de los datos
que permiten explorar la distribución identificando características tales como: valores
atípicos o outliers, saltos o discontinuidades, concentraciones de valores, forma de la
distribución, etc.
Una vez que se tiene el RDD en RAM en Spark se realiza un Análisis Exploratorio de Datos
(EDA, Exploratory Data Analysis) utilizando Python y el concepto de DataFrame en un
ambiente Jupyter. Luego, se definen enunciados de SQL para las transformaciones y
acciones que se desean realizar, pero con una arquitectura distribuida utilizando SparkSQL.
Instalación y uso del Python en SPARK
Para usar el lenguaje Python se debe instalar utilizando el siguiente comando:
pip install pyspark

Una vez instalado se puede ejecutar el commando pyspark en el terminal.


Instalación y uso del Python en SPARK

Los proyectos regulares de aprendizaje automático se basan en la siguiente


metodología:

1. Cargar los datos en el disco


2. Importar los datos a la memoria de la máquina.
3. Procesar / analizar los datos.
4. Construir el modelo de aprendizaje automático
5. Almacene la predicción nuevamente en el disco
Machine Learning con Spark
Usted procederá de la siguiente manera:

Paso 1) Operación básica con PySpark


Paso 2) Pre procesamiento de datos
Paso 3) Cree un pipeline de procesamiento de datos
Paso 4) Construye el clasificador
Paso 5) Entrenar y evaluar el modelo
Paso 6) Ajuste el hiperparámetro
Spark MLlib
MLlib o Spark MLlib es la librería de Machine Learning (ML) de Apache Spark. El framework
de computación distribuida que incorpora esta librería permite hacer uso de una serie de
algoritmos de Machine Learning.

Lo interesante de todo esto, es que los algoritmos de Machine Learning que están
implementados dentro de MLlib pueden ser escalados y paralelizados, aprovechando toda la
base de Spark.

Dentro de MLlib podemos encontrar dos APIs:

• La API principal o Spark ML, basada en DataFrames y que es esta dentro del paquete ML.
• Y la API original o Spark MLlib, que hace uso de RDDs y esta dentro del paquete MLlib.
Actualmente se encuentra en modo mantenimiento y muy probable que deje de existir en
Spark 3.0
Spark MLlib

El cambio de pasar de API basada en RDDs a otra basada en DataFrames, se debe


a que estos últimos unas estructuras de datos más rápidas y fáciles de manejar.
Spark MLlib
Dispone de las siguientes herramientas:
• Algoritmos de ML: son el core de MLlib. Están incluidos los algoritmos de machine
learning más comunes: Clasificadores, Regresores, Clustering y Filtros Colaborativos.
• Featurization: herramienta para extraer, seleccionar y transformar variables.
• Pipelines: otra herramienta para construir, evaluar y optimizar las pipelines de ML.
• Persistence: para guardar y cargar algoritmos, modelos y pipelines.
• Utilities: utilidades de álgebra lineal, estadística y manejo de datos.
Dentro entre todas estas, cabría destacar las siguientes:
• Estadística Básica
• Algoritmos de Clasificación y Regresión
• Sistemas de Recomendación
• Clustering
• Gestión de Features
• Optimización
Spark MLlib

En Estadística Básica se incluye las técnicas de machine learning más básicas, como:

• Cálculo de estadísticos descriptivos: media, varianza, , max, min, etc.


• Se puede ver el grado de correlación existente entre las variables.
• Muestreo estratificado, a través de dos métodos sampleBykey y sampleByKeyExact.
• Contraste de hipótesis, por ejemplo a través del test de Chi-Cuadrado.
• Generación de datos aleatorios siguiendo una determinada distribución, Normal o
Poisson, por ejemplo.
Spark MLlib
Algoritmos de Clasificación y Regresión
Los problemas de aprendizaje supervisado son aquellos en los que existe una variable explícita, algo concreto: edad, fuga,
color de pelo… a predecir.

Para aprender a predecir dicha variable, tendremos que enseñar al modelo un histórico pasado, del cual ya sabemos la
respuesta, es decir, se utilizan datasets etiquetados, en los que ya se tiene información acerca de lo sucedido. Es decir, para
crear un modelo de detección de fraude, será necesario contar con un conjunto de datos donde se sepa quién ha hecho
fraude y quién no.

Los supervisados se dividen en dos categorías, clasificadores y regresores, dependiendo de cómo sea la variable a predecir.

En los de clasificación la variable a predecir es una categoría o clase (valor categórico o discreto), por ejemplo:
rubio/moreno/pelirrojo, fuga/no-fuga de cliente, software malicioso/no-malicioso, etc. En estos, el modelo da como
resultado un valor de probabilidad para cada una de las categorías disponibles (distribución de probabilidad). Para el caso
de la regresión, la variable a predecir es numérica (normalmente continua pero no es estrictamente necesario), por
ejemplo: edad, altura, valor de una casa, número de Gb que va a gastar un cliente, etc.
Spark MLlib

En Spark MLlib están implementados muchos de estos algoritmos, tal y como


podemos ver en la siguiente tabla, obtenida de su documentación oficial:
Spark MLlib
Sistemas de Recomendación
Un sistema de recomendación es una subclase de un sistema de filtrado de información que busca predecir la
“calificación” o “preferencia” que un usuario daría a un elemento. Se han vuelto muy populares en los últimos
años y se utilizan en muchas áreas que incluyen: películas, música, noticias, libros, artículos de investigación,
búsquedas, etiquetas sociales y productos en general.

Se pueden clasificar según la forma en que generen la lista de recomendaciones:

• Los filtros colaborativos basan la construcción del modelo en el comportamiento pasado del usuario
(elementos previamente comprados o seleccionados y / o calificaciones numéricas otorgadas a esos
elementos), así como decisiones similares tomadas por otros usuarios. Este modelo luego se usa para predecir
los artículos en los que el usuario puede estar interesado.
• Los métodos de filtrado basado en contenido utilizan una serie de características discretas de un artículo para
recomendar elementos adicionales, con propiedades similares.
• Además, estos dos enfoques a menudo se combinan como sistemas de recomendación híbridos.
Spark MLlib permite el uso de filtros colaborativos, a través del algoritmo ALS (alternating least squares).
Spark MLlib
Clustering
Los algoritmos de clustering son capaces crear una serie clústeres o grupos de
observaciones que son similares entre sí.

Hay dos tipos de algoritmos de clustering:

Basados en la distancia: utilizan una métrica de distancia, como puede ser la euclídea,
Manhattan o Mahalanobis, para separar los distintos grupos o clusters.
Basados en la densidad: computan los grupos teniendo cuenta la distancia entre los
puntos y las “zonas” donde la densidad de puntos/observaciones es mayor.

Spark MLlib, permite de los siguientes algoritmos de clustering: K-means, Latent


Dirichlet allocation (LDA), Bisecting k-means, Gaussian Mixture Model (GMM).
Spark MLlib

Gestión de Features (Variables)


Spark MLlib dispone de un buen número de algoritmos para la extracción, selección y
transformación de variables. Tienes más información al respecto, en el siguiente link.

Optimization
Spark MLlib disponer de una serie de métodos para optimizar el entrenamiento de los
algoritmos, es decir, mejorar su velocidad de entrenamiento sin que haya pérdida en el
rendimiento.
TEMA 2: Extracción y transformación de características
utilizando MLlib.
ETL
ETL

Los datos producidos por los sistemas de las empresas no son coherentes o no están lo
suficientemente limpios parar combinarlos y poder realiza los análisis, reportes o
informes. Es por ello que los procesos de extracción, transformación y carga (ETL) se
utilizan muy a menudo para extraer los datos de diferentes sistemas o bases de datos
para limpiarlos y estandarizarlos para luego ser cargados en un sistema o almacén de
datos separado para su posterior análisis. Spark se utiliza para reducir el tiempo y costo
requerido para el proceso de ETL ya que posee una librería MLlib que permite el pre
procesamiento, la manipulación, el entrenamiento de modelos y la toma de decisiones
sobre los datos.
Una Consulta ETL en Apache Spark

Ejemplo 1 Ejemplo 2

Extraer val csvTable = spark.read.csv("/origen/ruta") Extraer


spark.read.json("/origen/ruta")
val jdbcTable = spark.read.format("jdbc")
.filter(...)
Transformar .option("url","jdbc:postgresql:...")
.agg(...)
.option("dbtable","base.pruebas")
.write.mode("append")
Cargar .load()
.parquet("/salid/ruta")
csvTable Transformar
.join(jdbcTable,Seq("name"),"outer")
.filter("id<=2999")
.write
.mode("overwrite")
.format("parquet")
.saveAsTablet("NombredeTablaSalida") Cargar
Dificultad de ETL en Apache Spark

• Diferentes orígenes y formatos


• Diferentes esquemas
• Diferentes representaciones o estandar
• Archivos y datos corruptos
• Escalabilidad
• La evolución o cambios de esquemas
• Continuos ETL
ETL
ETL
ETL
ETL
Transformaciones en SPARK

Entre Operaciones que se pueden realizar en los RDDs:


• Transformaciones:
 filter(func), devuelve un dataset tras aplicar un filtro con la función, func.
 map(func), devuelve un dataset parseando cada elemento mediante la función,
func, sobre el dataset original.
 flatMap(func), similar a map pero cada item puede mapear con 0 o más items de
salida y devolverá un dataset en una secuencia de items únicos.
 groupByKey([numTasks)], para una entrada (K,V) devuelve un dataset de pares
(K,Iterable(V)).
 reduceByKey(func,[numTasks]), para una entrada (K,V) devuelve un dataset (K,V)
donde los valores para cada clave son agregados usando la reduce función, func.
 sortByKey([ascending],[numTasks]), para una entrada (K,V) devuleve un dataset
(K,V) ordenado por la clave K.
Acciones en SPARK
• Acciones:
 reduce(func), agrega los elementos aplicando la función, func.
 collect(), devuelve todos los elementos del dataset en un array.
 count(), devuelve el número de elementos en el dataset.
 first(), devuelve el primer elemento del dataset.
 take(n), develve n elementos del dataset.
 saveAsTextFile(path), escribe el dataset en el fichero de texto indicado en el path.
 foreach(func), ejecuta la función, func, para cada elemento del dataset.
También se pueden compartir variables entre las máquinas del cluster:
Variables Broadcast: Estas variables permiten al programador mantener variables
read-only cacheadas en cada máquina para que sean compartidas.
Variables Acumuladoras: Variables para añadir operaciones asociativas que son
soportadas de forma eficiente en paralelo. Por ejemplo, para implementar
contadores o sumas.
MLlib
Apache Spark ofrece una API de aprendizaje automático llamada MLlib. PySpark también tiene esta API de aprendizaje automático en
Python que soporta diferentes tipos de algoritmos, los cuales se mencionan a continuación :
• mllib.classification - El paquete spark.mllib soporta varios métodos de clasificación binaria, clasificación multiclase y análisis de
regresión. Algunos de los algoritmos más populares en la clasificación son Random Forest, Naive Bayes, Decision Tree, etc.
• mllib.clustering - El clustering es un problema de aprendizaje no supervisado, por el que se pretende agrupar subconjuntos de
entidades entre sí basándose en alguna noción de similitud.
• mllib.fpm - La coincidencia de patrones frecuentes es la extracción de elementos, conjuntos de elementos, subsiguientes u otras
subestructuras frecuentes que suelen estar entre los primeros pasos para analizar un conjunto de datos a gran escala. Este ha sido
un tema de investigación activo en la minería de datos durante años.
• mllib.linalg - Utilidades MLlib para álgebra lineal.
• mllib.recommendation - El filtrado colaborativo se utiliza comúnmente para sistemas recomendadores. Estas técnicas tienen
como objetivo rellenar las entradas que faltan en una matriz de asociación de elementos de usuario.
• spark.mllib - Actualmente soporta el filtrado colaborativo basado en modelos, en el que los usuarios y los productos se describen
mediante un pequeño conjunto de factores latentes que pueden utilizarse para predecir las entradas que faltan. spark.mllib utiliza
el algoritmo de Alternancia de Cuadrados Mínimos (ALS) para aprender estos factores latentes.
• mllib.regression - La regresión lineal pertenece a la familia de los algoritmos de regresión. El objetivo de la regresión es encontrar
relaciones y dependencias entre las variables. La interfaz para trabajar con modelos de regresión lineal y resúmenes de modelos es
similar al caso de la regresión logística.
Hay otros algoritmos, clases y funciones que también forman parte del paquete mllib. A partir de ahora, entendamos una
demostración en pyspark.mllib. El siguiente ejemplo es de filtrado colaborativo utilizando el algoritmo ALS para construir el modelo
de recomendación y evaluarlo sobre los datos de entrenamiento.

https://www.tutorialspoint.com/pyspark/pyspark_mllib.htm
MLlib
TEMA 3: MLlib Pipelines: Transformadores y Estimadores.
Transformadores

Un Transformador es un algoritmo que puede transformar un


esquema RDD en otro Esquema RDD. Por ejemplo, un modelo ML
es un Transformador que transforma un RDD con características o
variables en un RDD con predicciones.
Estimadores

Un Estimador es un algoritmo que puede ser ajustado en un


esquema RDD para producir un Transformador. Por ejemplo, un
algoritmo de aprendizaje es un Estimador que se entrena en un
conjunto de datos y produce un modelo.
Pipeline
Un Pipeline encadena múltiples transformadores y estimadores para especificar un
flujo de trabajo de ML.

Un Pipeline se especifica como una secuencia de etapas, y cada etapa es un


transformador o un estimador.

Estas etapas se ejecutan en orden, y el DataFrame de entrada se transforma a


medida que pasa por cada etapa.

• Para las etapas de Transformador, el método transform() se llama en el


DataFrame.
• Para las etapas del Estimador, se llama al método fit() para producir un
Transformador (que se convierte en parte del Modelo "Pipeline", o "Pipeline"
ajustado), y ese método transform() del Transformador se llama en el DataFrame.
MLlib Pipelines

• MLlib representa un flujo de trabajo como un Pipeline, que consiste en una


secuencia de etapas del Pipeline (transformadores y estimadores) que se ejecutan
en un orden específico. Es un sencillo flujo de trabajo como un ejemplo de
ejecución.
• Un "Pipeline" es un Estimador. Por lo tanto, después de que se ejecuta el método
"Pipeline's fit()", produce un PipelineModel, que es un Transformador. Este
PipelineModel se utiliza en el momento de la prueba.
• El "PipelineModel" tiene el mismo número de etapas que el Pipeline original, pero
todos los Estimadores del Pipeline original se han convertido en Transformadores.
Cuando el método transform() del PipelineModel es llamado en un conjunto de
datos de prueba, los datos se pasan a través de la tubería ajustada en orden. El
método transform() de cada etapa actualiza el conjunto de datos y lo pasa a la
siguiente etapa. "Pipelines" y "PipelineModels" ayudan a asegurar que los datos
de entrenamiento y de prueba pasen por pasos de procesamiento de
características idénticas.
MLlib Pipelines (Transformadores y Estimadores)

Estimadores

Transformadores
Parametros

Todos los transformadores y estimadores comparten una API


común para especificar los parámetros.
ML Dataset
El aprendizaje automático puede aplicarse a una amplia variedad de tipos de datos,
como vectores, texto, imágenes y datos estructurados. Spark ML adopta un esquema
RDD del Spark SQL para dar soporte a una variedad de tipos de datos bajo un concepto
de conjunto de datos unificado.

El esquema RDD soporta muchos tipos de datos básicos y estructurados; véase la


referencia de tipos de datos de Spark SQL para obtener una lista de los tipos
soportados. Además de los tipos listados en la guía Spark SQL, Schema RDD puede usar
tipos de Vector ML.

Un esquema de RDD puede crearse implícita o explícitamente a partir de una RDD


regular. Las columnas de un esquema de un RDD tienen un nombre. Los ejemplos de
código que aparecen generalmente utilizan nombres como "texto", "características" y
"etiqueta".
TEMA 4: Modelo Paralelo vs Datos Paralelo.
Modelo Paralelo

El modelo de un algoritmo paralelo se desarrolla considerando una


estrategia para dividir los datos y el método de procesamiento aplicando
una estrategia adecuada para reducir las interacciones. Existen los
siguientes modelos de algoritmos paralelos:

• Modelo paralelo de datos


• Modelo de gráfico de tareas
• Modelo de la piscina de trabajo
• Modelo de maestro-esclavo
• Modelo de productor-consumidor o "pipeline".
• Modelo híbrido
Datos Paralelo

En el modelo de datos paralelos, las tareas se asignan a los procesos y cada tarea realiza
operaciones similares sobre los diferentes tipos de datos. El paralelismo de los datos es una
consecuencia de operaciones únicas que se aplican a múltiples elementos de datos.

El modelo de datos paralelos puede aplicarse en espacios de direcciones compartidas y


paradigmas de paso de mensajes. En el modelo de datos paralelos, los gastos o costos
generales de interacción pueden reducirse seleccionando una localidad que preserve la
descomposición, utilizando rutinas optimizadas de interacción colectiva o superponiendo el
cálculo y la interacción.

La principal característica de los problemas de los modelos paralelos de datos es que la


intensidad del paralelismo de los datos aumenta con el tamaño del problema, lo que a su
vez permite utilizar más procesos para resolver problemas más grandes.
Datos Paralelo
Modelo de datos en paralelo

Un modelo de datos en paralelo se centra en realizar


operaciones en un conjunto de datos que por lo general está
estructurado en una matriz. Un conjunto de tareas se realizará
operaciones en estos datos, pero de forma independiente en
particiones separadas.

El RDD contiene una colección arbitraria de objetos. En Spark


cada conjunto de datos en la RDD se distribuye lógicamente
entre los nodos del grupo para que puedan ser procesados en
paralelo.
Compartir Datos en MapReduce
Lenta debido a la replicación, serialización de la E/S del disco
Compartir Datos en SPARK
Distribuido en memoria es de 10X - 100X más rápido que el disco y la red.
Casos
Administración de Cluster

SPARK esta en la cima de los administrador de clúster


• SPARK puede explotar muchos recursos del cluster y administrarlos para ejecutar
sus aplicaciones.

• Spark en modo independiente:


Utiliza un planificador simple FIFO incluido en Spark.

• Hadoop YARN

• Mesos
Mesos y Spark ambos son AMPLAB de UC BERKELEY.
• Kubernetes
RDD

son operaciones que se realizan en una RDD que produce una


nueva RDD que contiene el resultado.

son operaciones que devuelven un valor después


de ejecutar un cálculo en una RDD
Paralelización de datos

La paralelización de los datos se da en diferentes máquinas para poder procesar la


información más rápido.

El Paralelizar los datos en diferentes máquinas no es más que dividir los datos en
archivos más pequeños. Estos archivos más pequeños son enviados cada uno a una
máquina diferente. De esta forma, cada máquina procesará una pequeña parte del
archivo o fichero inicial en lugar de analizar el archivo completo.

Una de las máquinas es la encargada de controlar las operaciones, que recibe el


nombre de máster, y las otras dos máquinas comunicadas con el máster, reciben el
nombre de trabajadores.
Paralelización de datos
Paralelización de datos

Ejemplo: Se conoce el consumo de energía durante los meses de la cuarentena en el


año 2020. Si queremos hallar la suma de KW/h en el clúster, se procede de la
siguiente forma:
1. Divide el fichero consumos.csv en 2 ficheros, particion1.csv y particion2.csv, cada
uno de ellos de 5 filas
2. Manda a una máquina del clúster el fichero particion1.csv y a la otra el fichero
particion2.csv
3. Cada máquina del clúster hace la suma de la segunda columna y devuelve el
resultado al master
4. Una vez que el master ha recibido los resultados de cada máquina, suma las dos
cantidades recibidas
5. Spark devuelve la suma total de la columna de los consumos.
Paralelización de datos
Ahora bien, si queremos hallar la media del consumo, cada máquina devuelve la
suma como ha hecho antes y, también, devuelve el número de filas que tenía el
fichero que ha analizado. En el ejemplo, se actuaría de la siguiente forma:

1. La máquina que procesa el fichero particion1.csv devolvería una suma de


consumos de 0.981 y el número de filas que ha analizado: 5
2. La máquina que procesa el fichero particion2.csv devolvería una suma de
consumos de 0.864 y el número de filas que ha analizado: 5.
3. La máquina master, suma el número de filas que envía cada máquina y suma
cada una de las sumas que recibe de cada una de las máquinas y hace la
siguiente división:
RDD

RDD
Transformaciones Acciones
map(función) reduce(función)
filter(función) collect()
flatMap(función) count()
sample(con reemplazo, fracción, semilla) take(n)
union(otro conjunto de datos) takeSample(con reemplazo,número,[semilla])
distinct(otro conjunto de datos) takeOrdered(n,[ordering])
groupBykey[K,V](función) first()
reduceBykey[K,V](función) countBykey()
aggregateBykey[K,V](función) saveAsTextFile(ruta)
join[K,V,W](otro conjunto de datos) saveAsSequenceFile(ruta)
cogroup[K,V,W1,W2](otro1,otro2) saveAsObjectFile(ruta)
cartesian[U](otro conjunto de datos) foreach(función)
sortByKey[K,V]
Modelo de datos en paralelo
Modelo de datos en paralelo
Otros Modelos

Modelo de gráfico de tareas Modelo de la piscina de trabajo Modelo de maestro-esclavo


Otros Modelos

Modelo de productor-consumidor o "pipeline" Modelo híbrido

Ejemplo: Parallel quick sort


TEMA 5: Regresión lineal, árboles de decisión, random forests
y clustering.
Regresión lineal
Regresión lineal

Consiste básicamente en una línea recta que muestra el “mejor encaje” de todos
los puntos de los valores numéricos. También se llama el método de los mínimos
cuadrados porque calcula la suma de las distancias al cuadrado entre los puntos
que representan los datos y los puntos de la línea que genera el modelo. Así, la
mejor estimación será la que minimice estas distancias.

Lo bueno es que es fácil de entender y se ve claramente el porqué de esa línea. No


obstante, tiende al overfitting, siendo peligrosos los valores extremos. Es
demasiado simple para capturar relaciones más complejas entre las variables.
Regresión lineal
Código : Linear regression
Código:
Árboles de decisión
Árboles de decisión

Es un gráfico que usa un método de ramificación basado en construcciones lógicas.


Los árboles de decisión comienzan con el conjunto de datos completo y se van
descomponiendo en distintas ramas en función de una serie de condiciones que se
van seleccionando hasta llegar a la resolución del problema.

Es muy fácil de entender e implementar, aunque resultan demasiado simples y


poco poderosos para datos complejos.
Código:
Código: Clasificación
Código: Regresión
Random forests
Random forests

Los Bosques aleatorios (Random forest) toman la media de muchos árboles de


decisión hechos con muestras de los datos. Como se basa en muestras, cada árbol
por separado es más débil que uno completo, pero la suma de todos logra unos
resultados mejores.

Tiende a dar modelos de alta calidad, pero es difícil entender el porqué de las
predicciones.
Código:

Random forest regression


Código:

Random forest classifier


Clustering
Clustering

es una técnica que permite identificar de forma automática agrupaciones o


clústeres de elementos de acuerdo a una medida de similitud entre ellos o la
similitud media entre elementos del mismo clúster y que esta sea alta logrando
agrupar un conjunto de objetos (no etiquetados) en subconjuntos de objetos
llamados Clusters.
Código: K-means
Código: K-means
Código: Latent Dirichlet allocation (LDA)
Código: Bisecting k-means
Código: Gaussian Mixture Model (GMM)
Código: Power Iteration Clustering (PIC)
Algoritmos de Clasificación

SPARK realiza la clasificación binaria mediante algoritmos de ML en Apache Spark


con grandes volúmenes de datos, en el cual se utiliza procesamiento distribuido y
son técnicas muy empleadas para reconocer patrones.

La mayoría de las poblaciones contiene subgrupos que muestran características


similares, en este tipo de relaciones se basan las técnicas de clasificación. El
MLlib de Spark se utiliza para realizar las tareas de clasificación binaria y otras
que permiten predecir la pertenencia a grupos para las diferentes instancias de
datos con información en tiempo real y aplicando técnicas de Big Data.
Código: Multilayer perceptron classifier
Código: Linear Support Vector Machine
Código: Logistic regression
Código: Naive Bayes
Reducción de la dimensionalidad

La reducción de la dimensionalidad es el proceso de reducir el número de


variables bajo consideración. Se puede utilizar para extraer características
latentes de las variables o características en bruto y ruidosas se usan para
comprimir datos mientras se mantiene la estructura.

El Análisis de componentes principales (PCA) es una técnica de reducción de


dimensión lineal que busca maximizar la varianza y preserva las distancias por
pares grandes. Esta técnica de reducción de la dimensión es eminentemente
exploratoria y una de las más utilizadas en el análisis de datos multivariante que
busca para maximizar la varianza o variabilidad.
Código: Análisis de componentes principales (PCA)
TEMA 6: Herramienta para rastrear los resultados del
modelo.
Herramientas
Herramientas
Herramientas

Algoritmos de ML: algoritmos de aprendizaje comunes como la


clasificación, regresión, agrupación y filtrado colaborativo.
Caracterización: extracción, transformación, reducción de la
dimensionalidad y selección de características.
Pipelines: herramientas para construir, evaluar y afinar las Pipelines
ML.
Persistencia: guardando y cargando algoritmos, modelos y Pipelines.
Utilidades: álgebra lineal, estadísticas, manejo de datos, etc.
Herramientas

• Selección de modelo (también conocido como ajuste de


hiperparámetros)
• Validación cruzada
• División de los datos en validación, prueba y entrenamiento
Herramientas
Herramientas
Spark Core
Spark Core es la base o el conjunto de librerías donde se apoya el resto de módulos
del Spark. Es el núcleo del framework Spark. El corazón de Spark es el acertadamente
llamado Spark Core que es el motor de ejecución de Spark sobre el que todos los
demás ejecutan sus algoritmos. Además de coordinar y programar los trabajos, Spark
Core proporciona una abstracción básica para el manejo de datos en Spark, conocido
como el Conjunto de Datos Distribuidos resilientes (resistentes, flexibles y tolerantes
a fallos que son capaz de operar en paralelo) (RDD).

Los RDD realizan dos acciones sobre los datos: transformaciones y acciones. La
primera realiza cambios en los datos y los sirve como una RDD recién creada; la
segunda calcula un resultado basado en una RDD existente (como el recuento de
objetos). Spark es rápido porque tanto las transformaciones como las acciones se
guardan en la memoria. Las acciones sólo se realizan cuando lo necesitan los datos en
cuestión; sin embargo, puede ser difícil averiguar qué es lo que funciona lentamente.
Spark APIs

Spark está escrito principalmente en Scala, por lo que los APIs primarios para
Spark han sido durante mucho tiempo para Scala. Pero otros tres lenguajes
de uso mucho más amplio también están soportados: Java (en el que
también se basa Spark), Python y R.

En general, lo mejor es elegir el lenguaje con el que se sienta más cómodo,


ya que lo más probable es que las características que necesita estén
directamente soportadas en el lenguaje. Una excepción en el soporte para el
aprendizaje de máquinas en SparkR es menos robusto en comparación, con
sólo un subconjunto de algoritmos actualmente disponibles.
Spark SQL
Spark SQL es un módulo de Apache Spark para el procesamiento de datos estructurados.
Spark SQL permite acceder de forma estructurada a los datos e integrar Spark con Hive,
ODBC, JDBC y herramientas de BI permitiendo ejecutar una consulta SQL contra un lote
de datos y la velocidad es varias veces mayor que la del motor de consulta de Hive.

El Spark SQL proporciona un mecanismo común para realizar consultas SQL (y solicitar
DataFrames en columnas) sobre datos proporcionados por el Spark, incluyendo consultas
canalizadas a través de conectores ODBC/JDBC.

Spark SQL no es realmente para actualizar datos, ya que es ortogonal a todo el punto de
Spark. La mayoría de las mejoras en mente para Spark SQL son para aumentar su
rendimiento. Spark SQL funciona en base a RDD por lo tanto, Spark SQL puede integrarse
perfectamente con otros componentes de Spark para implementar muchas funciones
complejas.
Spark Streaming

Spark Streaming es una extensión de la API core de Spark que ofrece procesamiento de datos
en tiempo real (streaming) de manera escalable, alto rendimiento y tolerancia a fallos.

Spark Streaming trabaja recibiendo streams de datos en vivo y los divide en batches o lotes,
que son procesados por el motor de Spark para generar un stream de salida.

El diseño de Spark permite soportar muchos métodos de procesamiento, incluyendo el


procesamiento de retransmisión o transmisión por secuencias, por lo que se conoce acerca
Spark Streaming sólo te permite usarlo cuando no necesitas latencias de fracción de segundo
o de procesamiento de flujo. Además, Spark promete un nuevo modelo de Streaming
estructurado que permite realizar consultas interactivas con Spark SQL de datos en vivo,
incluyendo el uso de las librerías de aprendizaje automático de Spark.
MLlib (Machine learning)

La tecnología de aprendizaje de máquinas tiene la reputación de ser tanto


milagrosa como difícil. Spark permite ejecutar una serie de algoritmos comunes de
aprendizaje automático con los datos de Spark, haciendo que este tipo de análisis
sea mucho más fácil y accesible para los usuarios de Spark.

La lista de algoritmos disponibles en MLlib es amplia y se amplía con cada revisión


del entorno. Dicho esto, que algunos tipos de algoritmos no están disponibles
como por ejemplo el aprendizaje profundo. Terceros están aprovechando la
popularidad del Spark para llenar ese vacío.
GraphX (Cálculo de gráficos)

El Mapeo de las relaciones entre miles o millones de entidades típicamente implica un


gráfico, que es una construcción matemática que describe cómo esas entidades se
interrelacionan. La API GraphX de Spark permite realizar operaciones de gráficos con los
datos usando las metodologías de Spark, así que el trabajo pesado de construir y
transformar tales gráficos se realiza en Spark. GraphX también incluye varios algoritmos
comunes para procesar los datos, como el PageRank o la propagación de etiquetas.

Una de las principales limitaciones de GraphX en su estado actual es que se adapta


mejor a los gráficos que son estáticos. Al procesar un gráfico donde se añaden nuevos
vértices afecta gravemente al rendimiento. Además, si ya estás usando una solución
completa de base de datos de gráficos, no es probable que GraphX lo reemplace
todavía.
SparkR (R en Spark)

El lenguaje R proporciona un entorno para realizar análisis estadísticos, análisis numéricos y el aprendizaje
de máquina. Spark añadió el soporte al programa estadístico R en junio de 2015 para igualar su soporte en
los lenguajes de Python y Scala.

Además de tener un idioma más disponible para los futuros desarrolladores de Spark, SparkR permite a los
programadores de R hacer muchas cosas que antes no podían hacer, como acceder a conjuntos de datos
más grandes que la memoria de una sola máquina o ejecutar más fácilmente el análisis de datos en
múltiples hilos o en múltiples máquinas a la vez.

SparkR también permite a los programadores de R hacer uso del aprendizaje de la máquina MLlib en Spark
para crear modelos lineales generales. Desafortunadamente, no todas las características de los MLlib están
soportadas en SparkR, aunque la brecha de soporte de R se está cerrando con cada revisión sucesiva del
Spark.
TEMA 7: Debug y DAG de procesos Spark.
Debug o Depuración
Pasos generales de depuración

1. Configure las opciones del depurador.


2.Para depurar el código de CoffeeScript, TypeScript y Dart, necesita mapas de fuente
generados además del código JavaScript. Los mapas de fuente establecen la
correspondencia entre las líneas en su código original y en el código Javascript generado,
de otra manera sus puntos de ruptura no serán reconocidos y procesados correctamente.
3.Defina una configuración de ejecución/depuración para la aplicación a ser depurada.
4.Crear puntos de interrupción en el código fuente.
5.Lanzar una sesión de depuración.
6.Haga una pausa o reanude la sesión de depuración según sea necesario.
7.Durante la sesión de depuración, pase por los puntos de ruptura, evalúe las expresiones,
cambie los valores sobre la marcha, examine el programa suspendido, explore las tramas y
establezca los controles y tiempos.
Debug
Para iniciar la depuración o el debugging
de un script en Python
DAG (Grafo Acíclico Dirigido)

DAG (Grafo Acíclico Dirigido) es un grafo dirigido que no tiene ciclos, es decir, para cada
nodo del grafo no hay un camino directo que comience y finalice en dicho nodo. Un
vértice se conecta a otro, pero nunca a si mismo.

Spark soporta el flujo de datos acíclico. Cada tarea de Spark crea un DAG de etapas de
trabajo para que se ejecuten en un determinado cluster. En comparación con
MapReduce, el cual crea un DAG con dos estados predefinidos (Map y Reduce), los
grafos DAG creados por Spark pueden tener cualquier número de etapas. Spark con
DAG es más rápido que MapReduce por el hecho de que no tiene que escribir en disco
los resultados obtenidos en las etapas intermedias del grafo. MapReduce, sin embargo,
debe escribir en disco los resultados entre las etapas Map y Reduce.
DAG (Grafo Acíclico Dirigido)
DAG(Grafo Acíclico Dirigido)
A diferencia de Hadoop, donde el usuario tiene que descomponer todas las operaciones en
tareas más pequeñas y encadenarlas para poder usar MapReduce, Spark define tareas que
pueden ser computadas en paralelo con los datos particionados en el cluster. Con estas tareas
definidas, Spark construye un flujo lógico de operaciones que puede ser representado como un
gráfico direccional y acíclico, también conocido como DAG (Directed Acyclic Graph), donde el
nodo representa una partición RDD y el borde representa una transformación de datos. Spark
construye el plan de ejecución implícitamente a partir de la aplicación proporcionada por Spark.
DAG es un término que describe todos los pasos a través de los cuales nuestros datos están
siendo operados y el DAG es un gráfico que denota la secuencia de operaciones que se están
realizando en el RDD. DAG en Apache Spark es un conjunto de vértices y bordes, donde los
vértices representan las RDDs y los bordes representan la operación que se va aplicar en la RDD.
Cuando se llama a una acción en la RDD del Spark a un nivel alto, se crea un DAG que se somete
a un planificador de DAG.
DAG (Grafo Acíclico Dirigido)
Spark Architecture
Arquitectura Spark
Arquitectura SPARK

Cuando ejecutamos la aplicación de spark en modo de clúster, la gestión de


recursos la maneja el propio administrador de recursos de spark y la fuente de
datos es el sistema de archivos local.

Para ejecutar la aplicación en modo de clúster, se debe tener un clúster


distribuido configurado con todos los trabajadores escuchando al maestro.

En nuestro ejemplo, el maestro se ejecuta en IP - 192.168.0.102 sobre el puerto


predeterminado 7077 con dos nodos de trabajo.
Arquitectura SPARK
La página del clúster brinda información detallada
sobre el clúster spark:
Vemos en la página web del clúster que trabajo(s)
se han enviado al clúster
TEMA 8: Tuning y buenas prácticas.
Tuning (ajuste o sintonizar)
• El ajuste del código es una forma de mejorar el rendimiento de un programa. Es la
práctica de modificar el código correcto de manera que se ejecute más
eficientemente. El afinamiento o tuning se refiere a cambios a pequeña escala que
afectan a una sola clase, una sola rutina o, más comúnmente a unas pocas líneas de
código.
• El ajuste de un parámetro es utilizado en el algoritmo estadístico para controlar su
comportamiento. El algoritmo crea normalmente para cada valor del parámetro un
ajuste de un modelo diferente y este debe ser elegido sabiamente para obtener el
mejor modelo. el problema es elegir un conjunto de hiperparámetros óptimos para
un algoritmo de aprendizaje.
• En Spark, Tuning se refiere al proceso de ajuste de los parámetros para la grabación o
partición de la memoria, los núcleos y las instancias utilizadas por el sistema. Esta
sección describe cómo utilizar las herramientas de MLlib para afinar los algoritmos de
ML y los Pipelines. La validación cruzada incorporada y otras herramientas permiten
a los usuarios optimizar los hiperparámetros en los algoritmos y en los Pipelines.
¿Qué es la práctica?
• La práctica es un hábito, es una rutina, no necesita recordar, viene con la
práctica. La práctica necesita dedicación y compromiso.
¿Qué es la práctica?
• Cualquiera de las habilidades mencionadas anteriormente proviene de la
práctica. Cuando inicialmente empiezas a conducir, necesitas recordar cada
paso y lo piensas dos veces antes de tomar cualquier acción, pero una vez que
"tienes una buena práctica" de conducción, entonces no necesitas recordar
ningún paso. Se convierte en su hábito y rutina, por ejemplo, sus pies frenan
automáticamente cuando vez una luz roja, pero definitivamente viene de
practicar mucho y necesita mucha dedicación y compromiso.
• El desarrollo de software tampoco es diferente de otras habilidades como
disparar, escribir o conducir. Para convertirse en un desarrollador de software
exitoso se necesita mucha práctica, dedicación y compromiso.
• El escoger las mejores prácticas de los desarrolladores de software, pueden
resultar útiles.
Buenas prácticas
• Mejor Práctica 1- Seguir leyendo el código fuente del software existente.
• Mejor Práctica 2 - Completar la documentación o sus documentos antes de dar el
siguiente paso.
• Mejor Práctica 3 - Seguir los estándares ya definidos, no crear o inventar.
• Mejor Práctica 4 - El código debe ser escrito para ser revisado y tu objetivo debería ser
detener los BUGS en primer lugar y crear un código LIBRE DE BUGS.
• Mejor Práctica 5 - Pruebas a seguir es una obligación después de cada cambio, no
importa lo apretado que sea el calendario o si sólo has cambiado un pequeño
comentario dentro del código, tienes que hacer pruebas en el código cambiado.
• Mejor Práctica 6 - Mantener el código y los documentos seguros, un desarrollador
inteligente mantiene el hábito de hacer copias de seguridad diarias de los de su
máquina local, así como en otra máquina segura, para que en caso de que la máquina se
caiga, pueda continuar con la copia guardada del código fuente o de los documentos.
• Mejor Práctica 7 - Tenga sus herramientas y técnicas a mano.
• Mejor Práctica 8 - Dejar el ego atrás, estar ansioso por aprender
Información
“23 años Comprometidos con la capacitación de
profesionales en el Perú”

También podría gustarte