Download - Apache Spark - Introduccion a RDDs
Data crunching con
David Przybilla https://github.com/dav009
@dav009
http://opendataco.github.io/
Invitacion ;)
“Big Data”
Arquitectura Lambda
Que es Spark? - Framework para procesar grandes cantidades de
información
- Es “como Hadoop, pero mejor”. El API es amor puro
- Accesible via Scala, Java, Python y R
- Permite procesar grandes cantidades de información en tiempo real.
- Funciona muy bien con tecnologías como : Cassandra, HDFS, Hive…
- No hay mucha diferencia entre resolver l mismo problema en Spark que en Scala
Cuando debería pensar en usar Spark?
• Exploración de Datos - Explorar un dataset grande - Slice (Particionar) dataset - Hacer un cluster en AWS es rapido y barato - Pipeline para procesar datos
• Crear Modelos / Pipeline de Procesamiento
• Sistemas de producción. i.e: - Calcular Modelos de Preferencia de Usuarios, - Calcular estadísticas sobre eventos..
Cuando debería pensar en usar Spark?
• Netflix: 1.5 Millones de eventos por Segundo • Netflix: 80 billones de eventos al día
• Factorizar una Matriz de 700GB (datos de twitter)
• Cruzar datos de diferentes ontologias: • DBpedia(100GB), • Freebase(350GB), • Wikidata(cerca 100GB)
• Wikimedia (32T)
Quien usa Spark?
"IBM said it will put more than 3,500 of its developers and researchers to work on
Spark-related projects. "
Hadoop
Spark
Contando largo de Lineas
SparkRDD1
RDD2
RDD3
RDD4
Accion!
parallelize( [1, 2, 3 …… x] )
RDD(Resilient Distributed Dataset)
[1, 2, 3 …… x]Regular Array
RDD
[1, 2, 3]
[4, 5, 6][6, 7, 8]
[…. x]
[1, 2, 3 …… x]
Partitions
Operaciones sobre RDDs
Transformaciones RDD RDD
Input RDD : [1, 2, 3 ,4 …]
f(x) = x + 1
Output RDD : [2, 3, 4 ,5 …]
Operaciones sobre RDDs
Acciones RDD Valor
Input RDD : [1, 2, 3 ,4]
sum
Output : 10
ResilentDDResilient: [1, 2, 3]
[4, 5, 6] [6, 7, 8]
[…. x]
[1, 2, 3]
[4, 5, 6]
[1, 2, 3, 7]
[4, 5, 6, 8]
[…. x]
Driver
Driver
val datosArchivo = sc.textFile(“/Path/toFile“)
[Linea1, Linea2,
Linea3…]
[Linea4, Linea5…]
[…. Linea x]
Driver
val palabras = datosArchivo.flatMap{ line => line.split(" ") }
Linea1: Hola Mundo
Linea2: Hello World
[“Hola”, “Mundo”]
[“Hello”, “World”]
split
split
flatten
[“Hello”, “World”, “Hola”, “Mundo”]
[Hello, World,…]
[Hola,…]
[….,Mundo ]Driver
val soloPalabrasValle = palabras.filter(_.toLowerCase()=="valle")
[Hello, World,…]
[c++…. valle ]
[Valle,…]Driver
val numeroOcurrenciasValle = soloPalabrasValle.map(palabra => 1).reduce(_+_)
[valle, valle, Valle ..] map[1, 1, 1 ….]
[1, 1, 1…1 ] reduce( (1 + 1) + 1 ) + 1)
Total: 10
Driver
{ "Creaci√ón de Proceso": "24 de June de 2015 10:50 A.M.", "Objeto del Contrato": "Prestacion de servicios profesionales como como medico general, en las condiciones, areas y servicios requeridos", "Estado del Contrato": "Celebrado", "Correo Electr√ónico": "[email protected]", "Fecha de Inicio de Ejecuci√ón del Contrato": "02 de mayo de 2015", "Grupo": "[F] Servicios", "Tipo de Contrato": "Prestaci√ón de Servicios", "Identificaci√ón del Representante Legal": "C√édula de Ciudadanía No. 1.110.479.226 Ibagu√é", "Departamento y Municipio de Ejecuci√ón": "Huila : La Plata", "Cuantía Definitiva del Contrato": "$12,000,000 Peso Colombiano", "documents": [ { "publication_date": "24-06-2015 11:03 AM", "url": "/cloud/cloud2/2015/DA/241396015/15-4-3967699/DA_PROCESO_15-4-3967699_241396015_15194469.pdf", "name": "Documento Adicional", "description": "ACTA INICIO" }, { "publication_date": "24-06-2015 11:02 AM", "url": "/cloud/cloud2/2015/C/241396015/15-4-3967699/C_PROCESO_15-4-3967699_241396015_15194424.pdf", "name": "Contrato", "description": "" } ], "Identificaci√ón del Contratista": "C√édula de Ciudadanía No. 1.110.479.226 Ibagu√é", "Nombre o Raz√ón Social del Contratista": "GERMAN EDUARDO SILVA BONILLA", "Nombre del Representante Legal del Contratista": "GERMAN EDUARDO SILVA BONILLA", "Segmento": "[85] Servicios de Salud", "Plazo de Ejecuci√ón del Contrato": "2 Meses", "Celebraci√ón de Contrato": "24 de June de 2015 11:04 A.M.", "Estado del Proceso": "Celebrado", "Clase": "[851016] Personas de soporte de prestaci√ón de servicios de salud", "Cuantía a Contratar": "$12,000,000", "R√égimen de Contrataci√ón": "ESE HOSPITAL", "Destinaci√ón del Gasto": "No Aplica", "Tipo de Proceso": "R√égimen Especial", "Detalle y Cantidad del Objeto a Contratar": "Prestacion de servicios profesionales como como medico general, en las condiciones, areas y servicios requeridos", "Fecha de Firma del Contrato": "30 de abril de 2015", "Familia": "[8510] Servicios integrales de salud",
Datos
import sqlContext._ import org.apache.spark.sql.SQLContext
val sqlContext = new SQLContext(sc)
val contratos = sqlContext.jsonFile("pathToFile") contratos.registerTempTable("contratos")
contratos.printSchema()
Json? Daataframes!
val contratosNombreCuantia = sqlContext.sql(query)
val query = "SELECT `Cuantía a Contratar` as cuantia, `Nombre o Razón Social del Contratista` as nombre, `Departamento y Municipio de Ejecución` as place FROM contratos"
contratosNombreCuantia.take(10)
Que debería aprender?• Programación Funcional?
• Dataframes (si! como en pandas ;) )
• Spark Streaming (Real time Spark)
• Spark-EC2 utils
• MLIB(Machine Learning)
• GraphX
Links utiles• Ejemplos: https://spark.apache.org/examples.html
• Cassandra - Spark: https://github.com/datastax/spark-cassandra-connector
• Exploracion: http://lightning-viz.org/
• Deep learning : https://github.com/deeplearning4j/deeplearning4j
Links Utiles• Pandas & Spark: http://www.slideshare.net/hkarau/sparkling-pandas-electric-bugaloo-
py-data-seattle-2015
• Sparta : Spark + Julia : https://github.com/dfdx/Sparta.jl
• Time series: https://github.com/charles-cai/spark-timeseries
• Deep learning on Spark : http://deepdist.com/
• Hive & Spark : http://www.slideshare.net/Hadoop_Summit/empower-hive-with-spark
• Exploring SparkR : http://blagrants.blogspot.co.uk/2015/06/exploring-sparkr.html
• Spark ETL Techniques : http://www.slideshare.net/DonDrake/spark-etl-techniques
• Lambda Architecture : https://www.parleys.com/tutorial/lambda-architecture-spark-streaming-kafka-cassandra-akka-scala
• StreamDM: Data Mining for Spark Streaming. http://huawei-noah.github.io/streamDM/