Retrying... Download. Connect more apps... Try one of the apps below to open or edit this item. 01 Intro to Apache Spark
Machine Learning with Spark MuleSoft Academy
Acerca del Curso -
Introducción a Big Data y Apache Spark. Introducción a Machine Learning. Machine Learning + Big Data. -
Regresión Lineal. Logistic Regression. Random Forests. Y tal vez algo más...
En Esta Clase -
Una muy veloz introducción a Big Data Todo lo que vamos a necesitar de Python El paradigma de programación distribuida: Map Reduce Apache Spark
Big Data “Datos que superan la capacidad normal de procesamiento” -
Los Datos no pueden almacenarse en un solo equipo => Cluster Los algoritmos normales no funcionan
Big Data -
Internet Archive: 80 Tb 1000 Genomes Project: 260 Tb Yahoo News: 13.5 Tb SLOAN Project: 2.5 Pb ImageNet Wikipedia Google Amazon Ebay Twitter Facebook
HDFS
HDFS -
Cada archivo se divide en “n” bloques. Usamos un cluster de “m” equipos. Cada equipo almacena algunos bloques. Los bloques se replican. Existe un “NameNode” que administra todo Los archivos son inmutables (!)
Python
Algunos Elementos de Python -
Estructuras de Datos en Python Funciones anónimas en Python
Estructuras de Datos en Python -
Tuplas Listas
Tuplas t1 = (‘A’,’B’,’C’) t2 = (‘A’,(‘B’,’C’)) t3 = ((‘A’,’B’),(‘C’,’D’,(’E’),’F’))
t1[1] = ? t2[?][?] = ‘C’ t3[???] = ‘E’
Tuplas t1 = (‘A’,’B’,’C’) t2 = (‘A’,(‘B’,’C’)) t3 = ((‘A’,’B’),(‘C’,’D’,(’E’),’F’))
t1[1] = ‘B’ t2[?][?] = ‘C’ t3[???] = ‘E’
Tuplas t1 = (‘A’,’B’,’C’) t2 = (‘A’,(‘B’,’C’)) t3 = ((‘A’,’B’),(‘C’,’D’,(’E’),’F’))
t1[1] = ‘B’ t2[1][1] = ‘C’ t3[???] = ‘E’
Tuplas t1 = (‘A’,’B’,’C’) t2 = (‘A’,(‘B’,’C’)) t3 = ((‘A’,’B’),(‘C’,’D’,(’E’),’F’))
t1[1] = ‘B’ t2[1][1] = ‘C’ t3[1][2][0] = ‘E’
Tuplas -
Las tuplas de 2 elementos son de especial interés porque las podemos considerar un registro de tipo (clave,valor) en donde tanto la clave como el valor pueden tener una estructura arbitraria.
Listas l1 = [‘A’,’B’,’C’,’D’] l2 = [‘A’,’B’,[‘C’,’D’]]
Las tuplas son estructuras estáticas, las listas son dinámicas.
Estructuras Complejas(?) r1 = ((‘A’,’B’),([(‘D’),(‘E’,’F’)],’G’,(‘H’,[‘I’,’J’])) Ejercicio: r1[...] = ‘A’ r1[...] = ‘D’ r1[...] = ‘F’ r1[...] = ‘J’
Funciones Anónimas lambda x: x+1 lambda x, y: x+y lambda r: r[0] + r[1] -
Cada una de estas expresiones devuelve una función. Como no tienen nombre son anónimas.
Funciones Anónimas Dada una lista de números programar una función que aplique una función a cada elemento de la lista.
Funciones Anónimas def applicator(l,f): result = [] for x in l: result.append(f(x))
Funciones Anónimas def applicator(l,f): [f(e) for e in l]
Funciones Anónimas Ejemplo: l1 = [2,3,4,5] l2 = applicator(l1,lambda x: x+1) l2 = [3,4,5,6]
Map Reduce
Map Reduce “MapReduce Simplified Data Processing on Large Clusters” [2004, Jeffrey Dean, Sanjay Ghemawat] -
Surge como necesidad para procesar el PageRank de todas las páginas Web.
Map Reduce -
Procesamiento distribuido vs procesamiento paralelo.
Map Reduce -
El paradigma de Map Reduce está basado en 2 operaciones fundamentales: Map y Reduce. Map es la operación que corre en paralelo en varios equipos del cluster, cada equipo procesa una cierta cantidad de registros del archivo. Reduce es la operación que reúne todos los resultados de Map y genera el resultado final.
Map -
Conceptualmente Map es una operación que recibe un archivo distribuido y una función “f” y aplica la función a cada registro del archivo.
resultFile = file.Map(f)
Map La función “f” debe recibir como parámetro un registro del archivo y puede devolver 1 o más registros en cualquier formato.
f(r) => [r’]
Reduce -
Reduce es una operación que recibe un archivo y una función que procesa exactamente dos registros de nuestro archivo y devuelve un registro El resultado de Reduce no es un archivo, es un registro! Reduce es una operación costosa.
result = file.Reduce(f)
Reduce -
La función reduce recibe 2 (dos) registros y devuelve un registro que debe tener exactamente el mismo formato que los registros anteriores.
f(r1,r2) => r
Apache Spark
Apache Spark -
Creado en AmpLab en la Universidad de Berkeley y donado a la ASF. En general funciona sobre Hadoop y HDFS. Incorpora bibliotecas para Machine Learning, Streamming (*) y Procesamiento de Grafos. APIs para Scala, Python y Java (vamos a usar Python) En este primer curso nos vamos a concentrar en Spark Core. Spark es una mejora de Hadoop permitiendo procesamiento distribuido de forma mucho más eficiente.
Apache Spark: RDDs -
-
RDDs: Resilient distributed datasets. Un RDD es una colección inmutable de registros que se almacena de forma distribuida y que es resistente a fallas. En otras palabras un archivo distribuido. Los RDDs son la estructura básica y fundamental de Spark (hay otras).
El Modelo de Procesamiento de Spark -
Los RDDs se pueden almacenar en memoria, disco o combinación de ambos. Spark intenta mantener en memoria todo lo que puede. Posibilidad de cachear resultados intermedios para reusarlos luego. El modelo de ejecución es lazy, Spark no hace nada hasta que necesita entregar resultados. En base a toda la secuencia de procesos Spark determina la estrategia óptima de ejecución.
Operaciones en Spark -
Las operaciones en Spark se dividen en dos grandes grupos: -
-
Transformaciones Acciones
Las transformaciones son lazy, las acciones desencadenan la ejecución. El proceso de ejecución se basa en una aplicación “driver” y varios “executors”
Arquitectura de Apache Spark
Acciones
Acciones -
Las acciones se aplican a un RDD y devuelven una estructura de datos local. Por lo tanto el procesamiento de un RDD en general implica una serie de transformaciones y finalmente una acción.
Luego de una acción no se puede aplicar una transformación ni una acción. Las acciones siempre son finales.
Acciones Básicas -
collect take reduce
collect -
Collect toma todos los registros de un RDD y los copia al driver, es decir que obtenemos todo el RDD como resultado! Es una operación muy peligrosa, si el RDD es muy grande la memoria del driver puede no ser suficiente. En general es muy buena práctica evitar el uso de collect
take -
Take es una versión más civilizada de collect :) take(n) nos devuelve los primeros “n” registros del RDD Es una operación muy útil para visualizar el formato de un RDD
takeOrdered -
takeOrdered(n) nos devuelve los primeros “n” registros del RDD ordenados de menor a mayor. Podemos indicar por qué criterio ordenar: ej takeOrdered(5,lambda x:-x[1]) takeOrdered implica un sort, no es magia! Usar con responsabilidad
reduce -
reduce es una operación que ya conocemos, recibe una función que debe procesar 2 (dos) registros y devolver otro del mismo formato El resultado de reduce es un único registro
Transformaciones
Transformaciones Básicas -
map flatMap filter reduceByKey
map -
map es una transformación que ya conocemos Recibe una función y la aplica a cada registro del RDD Lo que map devuelve (puede ser cualquier cosa) se convierte en un registro del RDD resultado
flatMap -
flatMap es una versión especial de map Para una función que procesa un registro y devuelve una lista: -
-
map devuelve un único registro con la lista flatMap devuelve un registro por cada elemento de la lista
Ejemplo: si map(x) = [‘a’,’b’,’c’] -
map genera un registro con [‘a’,’b’,’c’] flatMap genera tres registros: ‘a’,’b’ y ‘c’
filter -
-
Filter es una versión especial de map, filter recibe una función que devuelve T o F y devuelve un RDD que contiene los registros para los cuales la función devolvió T. Ejemplo: RDD.filter(lambda x: x>3)
reduceByKey -
reduceByKey es una operación muy importante! Pese a llamarse “reduce” es una transformación y no una acción! reduceByKey asume que nuestros registros son tuplas de 2 elementos (clave,valor). Agrupa los registros por clave y luego aplica reduce a todos los valores de cada clave
reduceByKey (‘a’,3); (‘b’,5); (‘a’,4); (‘a’,6); (‘c’,1);(’b’,2) RDD.reduceByKey(lambda x,y:x+y) (‘a’,13);(‘b’,7);(‘c’,1) -
-
La función que pasamos debe procesar dos VALORES y devolver un valor de igual estructura. Los valores no tienen porque ser atómicos pero su estructura debe mantenerse (regla general de cualquier Reduce) El resultado es un RDD con un registro por cada clave del RDD original
Reduce vs ReduceByKey
Next Week
Machine Learning “Todo lo que usted siempre quiso saber sobre Machine Learning y nunca se animó a preguntar” -
Modelos, Algoritmos, Overfitting, Underfitting, Bias, Variance, Cross Validation, Parámetros, Hiper-Parámetros, No Free Lunch Theorem, Paralelismo, Gradient Descent, Paradigmas de ML, Feature Engineering, etc etc etc....