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
Spark
RDD1
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
ResilentDD
Resilient: [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
servicios requeridos",
"Estado del Contrato": "Celebrado",
"Correo Electr√ónico": "contratacion@esesanantoniodepadua.gov.co",
"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
condiciones, areas y servicios requeridos",
"Fecha de Firma del Contrato": "30 de abril de 2015",
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 Socia
del Contratista` as nombre, `Departamento y Municipio de Ejecuci
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/

Data crunching con Spark

  • 1.
    Data crunching con DavidPrzybilla https://github.com/dav009 @dav009
  • 2.
  • 3.
  • 4.
  • 5.
    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
  • 6.
    Cuando debería pensaren 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
  • 7.
    • 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?
  • 8.
    • Netflix: 1.5Millones 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)
  • 9.
    Quien usa Spark? "IBMsaid it will put more than 3,500 of its developers and researchers to work on Spark-related projects. "
  • 10.
  • 11.
  • 12.
    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
  • 13.
    Operaciones sobre RDDs TransformacionesRDD RDD Input RDD : [1, 2, 3 ,4 …] f(x) = x + 1 Output RDD : [2, 3, 4 ,5 …]
  • 14.
    Operaciones sobre RDDs AccionesRDD Valor Input RDD : [1, 2, 3 ,4] sum Output : 10
  • 15.
    ResilentDD Resilient: [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
  • 16.
    val datosArchivo =
 sc.textFile(“/Path/toFile“) [Linea1, Linea2, Linea3…] [Linea4, Linea5…] […. Linea x] Driver
  • 17.
    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
  • 18.
  • 19.
    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
  • 20.
    { "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 servicios requeridos", "Estado del Contrato": "Celebrado", "Correo Electr√ónico": "contratacion@esesanantoniodepadua.gov.co", "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 condiciones, areas y servicios requeridos", "Fecha de Firma del Contrato": "30 de abril de 2015", Datos
  • 21.
    import sqlContext._ import org.apache.spark.sql.SQLContext valsqlContext = new SQLContext(sc)
 val contratos = 
 sqlContext.jsonFile("pathToFile") 
 contratos.registerTempTable("contratos")
 contratos.printSchema() Json? Daataframes!
  • 22.
    val contratosNombreCuantia =
 sqlContext.sql(query) val query = "SELECT `Cuantía a Contratar` as cuantia, `Nombre o Razón Socia del Contratista` as nombre, `Departamento y Municipio de Ejecuci as place FROM contratos" contratosNombreCuantia.take(10)
  • 23.
    Que debería aprender? •Programación Funcional? • Dataframes (si! como en pandas ;) ) • Spark Streaming (Real time Spark) • Spark-EC2 utils • MLIB(Machine Learning) • GraphX
  • 24.
    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
  • 25.
    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/