Nh Spark Python 2020
Nh Spark Python 2020
Nh Spark Python 2020
Python
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.
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
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
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.
• 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
En Estadística Básica se incluye las técnicas de machine learning más básicas, como:
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
• 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í.
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.
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
https://www.tutorialspoint.com/pyspark/pyspark_mllib.htm
MLlib
TEMA 3: MLlib Pipelines: Transformadores y Estimadores.
Transformadores
Estimadores
Transformadores
Parametros
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.
• Hadoop YARN
• Mesos
Mesos y Spark ambos son AMPLAB de UC BERKELEY.
• Kubernetes
RDD
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.
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
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.
Tiende a dar modelos de alta calidad, pero es difícil entender el porqué de las
predicciones.
Código:
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.
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 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
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