apache spark - introduccion a rdds

25
Data crunching con David Przybilla https://github.com/dav009 @dav009

Upload: david-przybilla

Post on 16-Apr-2017

733 views

Category:

Data & Analytics


0 download

TRANSCRIPT

Page 1: Apache Spark - Introduccion a RDDs

Data crunching con

David Przybilla https://github.com/dav009

@dav009

Page 2: Apache Spark - Introduccion a RDDs

http://opendataco.github.io/

Invitacion ;)

Page 3: Apache Spark - Introduccion a RDDs

“Big Data”

Page 4: Apache Spark - Introduccion a RDDs

Arquitectura Lambda

Page 5: Apache Spark - Introduccion a RDDs

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

Page 6: Apache Spark - Introduccion a RDDs

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

Page 7: Apache Spark - Introduccion a RDDs

• 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?

Page 8: Apache Spark - Introduccion a RDDs

• 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)

Page 9: Apache Spark - Introduccion a RDDs

Quien usa Spark?

"IBM said it will put more than 3,500 of its developers and researchers to work on

Spark-related projects. "

Page 10: Apache Spark - Introduccion a RDDs

Hadoop

Spark

Contando largo de Lineas

Page 11: Apache Spark - Introduccion a RDDs

SparkRDD1

RDD2

RDD3

RDD4

Accion!

Page 12: Apache Spark - Introduccion a RDDs

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

Page 13: Apache Spark - Introduccion a RDDs

Operaciones sobre RDDs

Transformaciones RDD RDD

Input RDD : [1, 2, 3 ,4 …]

f(x) = x + 1

Output RDD : [2, 3, 4 ,5 …]

Page 14: Apache Spark - Introduccion a RDDs

Operaciones sobre RDDs

Acciones RDD Valor

Input RDD : [1, 2, 3 ,4]

sum

Output : 10

Page 15: Apache Spark - Introduccion a RDDs

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

Page 16: Apache Spark - Introduccion a RDDs

val datosArchivo = sc.textFile(“/Path/toFile“)

[Linea1, Linea2,

Linea3…]

[Linea4, Linea5…]

[…. Linea x]

Driver

Page 17: Apache Spark - Introduccion a RDDs

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

Page 18: Apache Spark - Introduccion a RDDs

val soloPalabrasValle = palabras.filter(_.toLowerCase()=="valle")

[Hello, World,…]

[c++…. valle ]

[Valle,…]Driver

Page 19: Apache Spark - Introduccion a RDDs

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

Page 20: Apache Spark - Introduccion a RDDs

{ "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

Page 21: Apache Spark - Introduccion a RDDs

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!

Page 22: Apache Spark - Introduccion a RDDs

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)

Page 23: Apache Spark - Introduccion a RDDs

Que debería aprender?• Programación Funcional?

• Dataframes (si! como en pandas ;) )

• Spark Streaming (Real time Spark)

• Spark-EC2 utils

• MLIB(Machine Learning)

• GraphX

Page 24: Apache Spark - Introduccion a RDDs

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

Page 25: Apache Spark - Introduccion a RDDs

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/