SlideShare una empresa de Scribd logo
1 de 43
Descargar para leer sin conexión
Tutorial en Apache Spark 
Clasificando Tweets en Realtime 
Gustavo Arjones 
gustavo@socialmetrix.com 
@arjones
AGENDA 
• Qué es Apache Spark? 
• Introducción a Scala 
• Crear un pipeline con Apache Spark (Word Count) 
• Cargar JSON de Tweets (Statuses) 
• Crear un programa que consume del stream (simulado) 
• Obtener los lenguajes de programación más hablados 
• Por usuario, por url, por localización
Qué es 
Apache Spark?
Qué es Spark? 
Apache Spark™ is a fast and general engine for large-scale data 
processing. 
• Procesamiento In-memory (preferentemente) 
• Framework de Procesamiento Unificado 
• Para Ingenieros & Data Scientists
Principales Pilares 
Task Scheduler 
• Prepara los jobs a través de DAG (Directed acyclic graph) 
• Concatena funciones para ejecutar los stages 
• Cache-aware; considera utilización & localización de datos 
(data locality) 
• Partitioning-aware para reducir shuffles por la red 
RDD (Resilient Distributed Datasets) 
• 
Estructura de datos Inmutable (In-memory) 
• Tolerante a fallas (Se rearma en caso de falla) 
• Estructura de datos que puede ser operada en paralelo 
• Rica interfaz de Transformations & Actions
Plataforma Unificada
Hands On!
DISCLAIMER 
Para que los ejercicios sean realizados dentro del tiempo 
establecido para el laboratorio los datasets son chicos. 
Las soluciones que desarrollamos acá pueden escalar 
para cientos de servidores y Terabytes de datos 
Las técnicas se aplican a mayor Volumen y Velocidad: 
Internet Of Things (IoT), Logs, games, mobile, etc
Introducción a 
#Scala
Declarando Variables 
val 
à 
declara 
variables 
inmutables 
(final 
en 
Java)
Declarando Función 
Crear una función que calcule el valor al cubo 
def 
à 
declara 
función 
scala> cube(10) 
res0: Int = 1000
Usar MAP 
NOTA: Es una función, no la estructura de datos! 
Aplicar la función cube() a la lista de números myNumbers 
scala> myNumbers.map(cube(_)) 
scala> myNumbers.map(cube)
Usar Map and Tuples 
Tuples son estructura auxiliares que permiten llevar multiplos 
valores sin necesidad de crear clases (VO) 
scala> myNumbers.map(n => (n, cube(n))) 
res1: List[(Int, Int)] = List((1,1), (2,8), (5,125), (4,64), (7,343), (3,27)) 
scala> myNumbers.map(n => (n, cube(n))).foreach(println) 
(1,1) 
(2,8) 
(5,125) 
(4,64) 
(7,343) 
(3,27)
Usar Filter 
Aplicar Filter a la lista myNumbers dejando solo impares 
scala> myNumbers.filter(n => (n % 2) == 1) 
res6: List[Int] = List(1, 5, 7, 3) 
scala> myNumbers.filter(_ % 2 == 1) 
res6: List[Int] = List(1, 5, 7, 3)
Usar Reduce 
Sumar todos los elementos de la lista 
scala> myNumbers.reduce((x, y) => x + y) 
res10: Int = 22 
scala> myNumbers.reduce(_ + _)
CHALLENGE 
Sumar todos los números pares en el rango de 0-99 
TIP: 
scala> val numbers = Range(0, 100) 
numbers: scala.collection.immutable.Range = Range(0, 1, ..) 
scala> numbers.filter(_ % 2 == 0).reduce(_ + _) 
res2: Int = 2450
Creando el 
primero pipeline 
con Apache 
Spark 
Código Fuente: 
https://github.com/socialmetrix/wisit14
Contar Palabras
data/don-­‐quijote.txt.gz
data/don-­‐quijote.txt.gz
data/don-­‐quijote.txt.gz
data/don-­‐quijote.txt.gz
data/don-­‐quijote.txt.gz
data/don-­‐quijote.txt.gz
data/don-­‐quijote.txt.gz
Apache Spark es Lazy! 
Viste que no pasó nada hasta la última 
linea? 
Nada es procesado entre 
Transformaciones. 
Solo se ejecuta cuando se realiza una 
Acción (top)
API muy expresiva, mucho más operaciones! 
Ver: https://spark.apache.org/docs/latest/api/scala/#org.apache.spark.rdd.RDD
CHALLENGE 
El resultado no es muy interesante, porque las principales 
palabras son stopwords, remueverlas para dar mayor significado
Manipulando 
Tweets
Propuesta 
Crear un listado de los lenguajes más tweetados, similar al listado de 
lenguajes que crea Github 
http://adambard.com/blog/top-github-languages-2014/
Consideraciones 
• Dataset contiene un JSON por linea (one-liner) 
• Hay que interpretar JSON 
• Pueden haber erroes en los JSON 
– Lineas vacias 
– Lineas malformadas / Diferentes schemas
Obtener las TOP HASHTAGS (batch mode) 
Ver archivo 
./src/main/scala/smx/sql/TopHashtags.scala 
Compilar y Ejecutar 
./sbt/sbt assembly 
spark-submit  
--class smx.sql.TopHashtags  
target/scala-2.10/wisit2014-spark-assembly-0.0.1.jar  
data/tweets-20141126-sample.json
Procesando 
tweets en 
Real-time
Stream es una secuencia de RDD
Streaming 
Ver archivos 
./src/main/scala/smx/utils/SocketServer.scala 
Iniciar SocketServer (simula Twitter Streaming) 
java  
-cp target/scala-2.10/wisit2014-spark-assembly-0.0.1.jar  
smx.utils.SocketServer  
data/tweets-20141126-sample.json
Streaming (cont.) 
Ver archivo 
./src/main/scala/smx/stream/StreamProcessor.scala 
Iniciar Streaming Processor 
spark-submit  
--class smx.stream.StreamProcessor  
target/scala-2.10/wisit2014-spark-assembly-0.0.1.jar
h)p://localhost:4040/
CHALLENGE 
Cambiar de Hashtags para TOP Usuarios 
TIP: 
El usuario es user.screen_name en el JSON
Usando SparkStreaming con Twitter 
(necesita conexión de internet) 
Training Oficial 2014 
Stream Processing with Spark Streaming 
https://databricks-training.s3.amazonaws.com/realtime-processing-with- 
spark-streaming.html
Donde aprender 
más?
Mucha documentación disponible 
https://spark.apache.org/documentation.html 
http://spark-summit.org/2014/training 
http://arjon.es/tag/spark/ 
http://www.slideshare.net/frodriguezolivera/apache-spark- 
41601032 
First Steps to Scala 
http://www.artima.com/scalazine/articles/steps.html 
http://shop.oreilly.com/ 
product/0636920028512.do
Gracias & Obrigado! 
Gustavo Arjones 
gustavo@socialmetrix.com 
@arjones 
jobs@socialmetrix.com

Más contenido relacionado

La actualidad más candente

Procesamiento de datos a gran escala con Apache Spark
Procesamiento de datos a gran escala con Apache SparkProcesamiento de datos a gran escala con Apache Spark
Procesamiento de datos a gran escala con Apache SparkSoftware Guru
 
Introducción a Apache Spark
Introducción a Apache SparkIntroducción a Apache Spark
Introducción a Apache SparkSocialmetrix
 
Estudio sobre Spark, Storm, Kafka y Hive
Estudio sobre Spark, Storm, Kafka y HiveEstudio sobre Spark, Storm, Kafka y Hive
Estudio sobre Spark, Storm, Kafka y HiveWellness Telecom
 
Big data con Hadoop y SSIS 2016
Big data con Hadoop y SSIS 2016Big data con Hadoop y SSIS 2016
Big data con Hadoop y SSIS 2016Ángel Rayo
 
Construyendo una Infraestructura de Big Data rentable y escalable (la evoluci...
Construyendo una Infraestructura de Big Data rentable y escalable (la evoluci...Construyendo una Infraestructura de Big Data rentable y escalable (la evoluci...
Construyendo una Infraestructura de Big Data rentable y escalable (la evoluci...Socialmetrix
 
Meetup Spark y la Combinación de sus Distintos Módulos
Meetup Spark y la Combinación de sus Distintos MódulosMeetup Spark y la Combinación de sus Distintos Módulos
Meetup Spark y la Combinación de sus Distintos MódulosJorge Lopez-Malla
 
Log -Analytics con Apache-Flume Elasticsearch HDFS Kibana
 Log -Analytics con Apache-Flume  Elasticsearch HDFS Kibana Log -Analytics con Apache-Flume  Elasticsearch HDFS Kibana
Log -Analytics con Apache-Flume Elasticsearch HDFS KibanaFelix Rodriguez
 
Creación de un clúster de Hadoop con Cloudera
Creación de un clúster de Hadoop con ClouderaCreación de un clúster de Hadoop con Cloudera
Creación de un clúster de Hadoop con ClouderaDavid Albela Pérez
 
Big Data a traves de una implementación
Big Data a traves de una implementaciónBig Data a traves de una implementación
Big Data a traves de una implementaciónDiego Krauthamer
 

La actualidad más candente (20)

Procesamiento de datos a gran escala con Apache Spark
Procesamiento de datos a gran escala con Apache SparkProcesamiento de datos a gran escala con Apache Spark
Procesamiento de datos a gran escala con Apache Spark
 
Introducción a Apache Spark
Introducción a Apache SparkIntroducción a Apache Spark
Introducción a Apache Spark
 
Apache spark meetup
Apache spark meetupApache spark meetup
Apache spark meetup
 
Estudio sobre Spark, Storm, Kafka y Hive
Estudio sobre Spark, Storm, Kafka y HiveEstudio sobre Spark, Storm, Kafka y Hive
Estudio sobre Spark, Storm, Kafka y Hive
 
OpenAnalytics Madrid 2014: Spark
OpenAnalytics Madrid 2014: SparkOpenAnalytics Madrid 2014: Spark
OpenAnalytics Madrid 2014: Spark
 
Big data con Hadoop y SSIS 2016
Big data con Hadoop y SSIS 2016Big data con Hadoop y SSIS 2016
Big data con Hadoop y SSIS 2016
 
Data crunching con Spark
Data crunching con SparkData crunching con Spark
Data crunching con Spark
 
Construyendo una Infraestructura de Big Data rentable y escalable (la evoluci...
Construyendo una Infraestructura de Big Data rentable y escalable (la evoluci...Construyendo una Infraestructura de Big Data rentable y escalable (la evoluci...
Construyendo una Infraestructura de Big Data rentable y escalable (la evoluci...
 
Aula virtual apache_hadoop_v3 1
Aula virtual apache_hadoop_v3 1Aula virtual apache_hadoop_v3 1
Aula virtual apache_hadoop_v3 1
 
Open analytics. data analytics con hadoop
Open analytics. data analytics con hadoopOpen analytics. data analytics con hadoop
Open analytics. data analytics con hadoop
 
Introducción a hadoop
Introducción a hadoopIntroducción a hadoop
Introducción a hadoop
 
Spark web meetup
Spark web meetupSpark web meetup
Spark web meetup
 
Hadoop en accion
Hadoop en accionHadoop en accion
Hadoop en accion
 
Meetup Spark y la Combinación de sus Distintos Módulos
Meetup Spark y la Combinación de sus Distintos MódulosMeetup Spark y la Combinación de sus Distintos Módulos
Meetup Spark y la Combinación de sus Distintos Módulos
 
Log -Analytics con Apache-Flume Elasticsearch HDFS Kibana
 Log -Analytics con Apache-Flume  Elasticsearch HDFS Kibana Log -Analytics con Apache-Flume  Elasticsearch HDFS Kibana
Log -Analytics con Apache-Flume Elasticsearch HDFS Kibana
 
Hadoop: tecnologias relacionadas
Hadoop: tecnologias relacionadasHadoop: tecnologias relacionadas
Hadoop: tecnologias relacionadas
 
Creación de un clúster de Hadoop con Cloudera
Creación de un clúster de Hadoop con ClouderaCreación de un clúster de Hadoop con Cloudera
Creación de un clúster de Hadoop con Cloudera
 
Hadoop
HadoopHadoop
Hadoop
 
Curso introductorio a matlab
Curso introductorio a matlabCurso introductorio a matlab
Curso introductorio a matlab
 
Big Data a traves de una implementación
Big Data a traves de una implementaciónBig Data a traves de una implementación
Big Data a traves de una implementación
 

Similar a Tutorial en Apache Spark - Clasificando tweets en realtime

Análisis de datos con Apache Spark
Análisis de datos con Apache SparkAnálisis de datos con Apache Spark
Análisis de datos con Apache SparkEduardo Castro
 
Herramientas BigData.pptx
Herramientas BigData.pptxHerramientas BigData.pptx
Herramientas BigData.pptxMauricio Bedoya
 
Bases de datos NoSQL - Huancayo - 2010
Bases de datos NoSQL - Huancayo - 2010Bases de datos NoSQL - Huancayo - 2010
Bases de datos NoSQL - Huancayo - 2010Antonio Ognio
 
Motor De Bases De Datos Oracle
Motor De Bases De Datos OracleMotor De Bases De Datos Oracle
Motor De Bases De Datos Oracletriana25
 
Motor De Bases De Datos Oracle
Motor De Bases De Datos OracleMotor De Bases De Datos Oracle
Motor De Bases De Datos Oracletriana25
 
Motor De Bases De Datos Oracle
Motor De Bases De Datos OracleMotor De Bases De Datos Oracle
Motor De Bases De Datos Oracletriana25
 
Scala en proyectos de vinculación Ancap-UR - 2013-03
Scala en proyectos de vinculación Ancap-UR - 2013-03Scala en proyectos de vinculación Ancap-UR - 2013-03
Scala en proyectos de vinculación Ancap-UR - 2013-03Germán Ferrari
 
Base de datos_-_material_didactico
Base de datos_-_material_didacticoBase de datos_-_material_didactico
Base de datos_-_material_didacticoenriquehot
 
Curso Swift
Curso SwiftCurso Swift
Curso SwiftPlatzi
 
Primeros pasos con Spark - Spark Meetup Madrid 30-09-2014
Primeros pasos con Spark - Spark Meetup Madrid 30-09-2014Primeros pasos con Spark - Spark Meetup Madrid 30-09-2014
Primeros pasos con Spark - Spark Meetup Madrid 30-09-2014Stratio
 

Similar a Tutorial en Apache Spark - Clasificando tweets en realtime (20)

Análisis de datos con Apache Spark
Análisis de datos con Apache SparkAnálisis de datos con Apache Spark
Análisis de datos con Apache Spark
 
Meetup Fun[ctional] spark with scala
Meetup Fun[ctional] spark with scalaMeetup Fun[ctional] spark with scala
Meetup Fun[ctional] spark with scala
 
Fun[ctional] spark with scala
Fun[ctional] spark with scalaFun[ctional] spark with scala
Fun[ctional] spark with scala
 
Herramientas BigData.pptx
Herramientas BigData.pptxHerramientas BigData.pptx
Herramientas BigData.pptx
 
Bases de datos NoSQL - Huancayo - 2010
Bases de datos NoSQL - Huancayo - 2010Bases de datos NoSQL - Huancayo - 2010
Bases de datos NoSQL - Huancayo - 2010
 
Baño
BañoBaño
Baño
 
Resilient Distributed Dataset - Analisis paper
Resilient  Distributed Dataset - Analisis paper Resilient  Distributed Dataset - Analisis paper
Resilient Distributed Dataset - Analisis paper
 
Sistemas de gestión de base de datos
Sistemas de gestión de base de datosSistemas de gestión de base de datos
Sistemas de gestión de base de datos
 
Motor De Bases De Datos Oracle
Motor De Bases De Datos OracleMotor De Bases De Datos Oracle
Motor De Bases De Datos Oracle
 
Motor De Bases De Datos Oracle
Motor De Bases De Datos OracleMotor De Bases De Datos Oracle
Motor De Bases De Datos Oracle
 
Motor De Bases De Datos Oracle
Motor De Bases De Datos OracleMotor De Bases De Datos Oracle
Motor De Bases De Datos Oracle
 
ORACLE
ORACLEORACLE
ORACLE
 
GLUE (1).pdf
GLUE (1).pdfGLUE (1).pdf
GLUE (1).pdf
 
CSA - Office.com sobre SharePoint
CSA - Office.com sobre SharePointCSA - Office.com sobre SharePoint
CSA - Office.com sobre SharePoint
 
Lenguaje transact sql
Lenguaje transact sqlLenguaje transact sql
Lenguaje transact sql
 
Scala en proyectos de vinculación Ancap-UR - 2013-03
Scala en proyectos de vinculación Ancap-UR - 2013-03Scala en proyectos de vinculación Ancap-UR - 2013-03
Scala en proyectos de vinculación Ancap-UR - 2013-03
 
Base de datos_-_material_didactico
Base de datos_-_material_didacticoBase de datos_-_material_didactico
Base de datos_-_material_didactico
 
Curso Swift
Curso SwiftCurso Swift
Curso Swift
 
EXPO PERL UTT
EXPO PERL UTTEXPO PERL UTT
EXPO PERL UTT
 
Primeros pasos con Spark - Spark Meetup Madrid 30-09-2014
Primeros pasos con Spark - Spark Meetup Madrid 30-09-2014Primeros pasos con Spark - Spark Meetup Madrid 30-09-2014
Primeros pasos con Spark - Spark Meetup Madrid 30-09-2014
 

Más de Socialmetrix

7 Disparadores de Engagement para o mercado de consumo massivo
7 Disparadores de Engagement para o mercado de consumo massivo7 Disparadores de Engagement para o mercado de consumo massivo
7 Disparadores de Engagement para o mercado de consumo massivoSocialmetrix
 
The Ultimate Guide to using Social Media Media Analytics
The Ultimate Guide to using Social Media Media AnalyticsThe Ultimate Guide to using Social Media Media Analytics
The Ultimate Guide to using Social Media Media AnalyticsSocialmetrix
 
Social Media is no longer something relevant just for the area of Marketing. ...
Social Media is no longer something relevant just for the area of Marketing. ...Social Media is no longer something relevant just for the area of Marketing. ...
Social Media is no longer something relevant just for the area of Marketing. ...Socialmetrix
 
How to Create a Successful Social Media Campaign
How to Create a Successful Social Media CampaignHow to Create a Successful Social Media Campaign
How to Create a Successful Social Media CampaignSocialmetrix
 
AWS re:Invent 2014 | (ARC202) Real-World Real-Time Analytics
AWS re:Invent 2014 | (ARC202) Real-World Real-Time AnalyticsAWS re:Invent 2014 | (ARC202) Real-World Real-Time Analytics
AWS re:Invent 2014 | (ARC202) Real-World Real-Time AnalyticsSocialmetrix
 
Conferencia MySQL, NoSQL & Cloud: Construyendo una infraestructura de big dat...
Conferencia MySQL, NoSQL & Cloud: Construyendo una infraestructura de big dat...Conferencia MySQL, NoSQL & Cloud: Construyendo una infraestructura de big dat...
Conferencia MySQL, NoSQL & Cloud: Construyendo una infraestructura de big dat...Socialmetrix
 
Social media brasil 2014 - O Marketing e as Redes Sociais em tempos de conver...
Social media brasil 2014 - O Marketing e as Redes Sociais em tempos de conver...Social media brasil 2014 - O Marketing e as Redes Sociais em tempos de conver...
Social media brasil 2014 - O Marketing e as Redes Sociais em tempos de conver...Socialmetrix
 
14º Encontro Locaweb - Evolução das Plataformas para Métricas Sociais
14º Encontro Locaweb - Evolução das Plataformas para Métricas Sociais14º Encontro Locaweb - Evolução das Plataformas para Métricas Sociais
14º Encontro Locaweb - Evolução das Plataformas para Métricas SociaisSocialmetrix
 
Jugar Introduccion a Scala
Jugar Introduccion a ScalaJugar Introduccion a Scala
Jugar Introduccion a ScalaSocialmetrix
 
Endeavor – métricas em mídias sociais
Endeavor – métricas em mídias sociaisEndeavor – métricas em mídias sociais
Endeavor – métricas em mídias sociaisSocialmetrix
 
MongoDB, RabbitMQ y Applicaciones en Nube
MongoDB, RabbitMQ y Applicaciones en NubeMongoDB, RabbitMQ y Applicaciones en Nube
MongoDB, RabbitMQ y Applicaciones en NubeSocialmetrix
 

Más de Socialmetrix (13)

7 Disparadores de Engagement para o mercado de consumo massivo
7 Disparadores de Engagement para o mercado de consumo massivo7 Disparadores de Engagement para o mercado de consumo massivo
7 Disparadores de Engagement para o mercado de consumo massivo
 
The Ultimate Guide to using Social Media Media Analytics
The Ultimate Guide to using Social Media Media AnalyticsThe Ultimate Guide to using Social Media Media Analytics
The Ultimate Guide to using Social Media Media Analytics
 
Social Media is no longer something relevant just for the area of Marketing. ...
Social Media is no longer something relevant just for the area of Marketing. ...Social Media is no longer something relevant just for the area of Marketing. ...
Social Media is no longer something relevant just for the area of Marketing. ...
 
How to Create a Successful Social Media Campaign
How to Create a Successful Social Media CampaignHow to Create a Successful Social Media Campaign
How to Create a Successful Social Media Campaign
 
AWS re:Invent 2014 | (ARC202) Real-World Real-Time Analytics
AWS re:Invent 2014 | (ARC202) Real-World Real-Time AnalyticsAWS re:Invent 2014 | (ARC202) Real-World Real-Time Analytics
AWS re:Invent 2014 | (ARC202) Real-World Real-Time Analytics
 
Conferencia MySQL, NoSQL & Cloud: Construyendo una infraestructura de big dat...
Conferencia MySQL, NoSQL & Cloud: Construyendo una infraestructura de big dat...Conferencia MySQL, NoSQL & Cloud: Construyendo una infraestructura de big dat...
Conferencia MySQL, NoSQL & Cloud: Construyendo una infraestructura de big dat...
 
Social media brasil 2014 - O Marketing e as Redes Sociais em tempos de conver...
Social media brasil 2014 - O Marketing e as Redes Sociais em tempos de conver...Social media brasil 2014 - O Marketing e as Redes Sociais em tempos de conver...
Social media brasil 2014 - O Marketing e as Redes Sociais em tempos de conver...
 
14º Encontro Locaweb - Evolução das Plataformas para Métricas Sociais
14º Encontro Locaweb - Evolução das Plataformas para Métricas Sociais14º Encontro Locaweb - Evolução das Plataformas para Métricas Sociais
14º Encontro Locaweb - Evolução das Plataformas para Métricas Sociais
 
Call2Social
Call2SocialCall2Social
Call2Social
 
Redis
RedisRedis
Redis
 
Jugar Introduccion a Scala
Jugar Introduccion a ScalaJugar Introduccion a Scala
Jugar Introduccion a Scala
 
Endeavor – métricas em mídias sociais
Endeavor – métricas em mídias sociaisEndeavor – métricas em mídias sociais
Endeavor – métricas em mídias sociais
 
MongoDB, RabbitMQ y Applicaciones en Nube
MongoDB, RabbitMQ y Applicaciones en NubeMongoDB, RabbitMQ y Applicaciones en Nube
MongoDB, RabbitMQ y Applicaciones en Nube
 

Último

Guia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos BasicosGuia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos BasicosJhonJairoRodriguezCe
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.FlorenciaCattelani
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estossgonzalezp1
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanamcerpam
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...JohnRamos830530
 
investigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIinvestigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIhmpuellon
 
redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativanicho110
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxJorgeParada26
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21mariacbr99
 
Buenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxBuenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxFederico Castellari
 

Último (10)

Guia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos BasicosGuia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos Basicos
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
 
investigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIinvestigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXI
 
redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativa
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 
Buenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxBuenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptx
 

Tutorial en Apache Spark - Clasificando tweets en realtime

  • 1. Tutorial en Apache Spark Clasificando Tweets en Realtime Gustavo Arjones gustavo@socialmetrix.com @arjones
  • 2. AGENDA • Qué es Apache Spark? • Introducción a Scala • Crear un pipeline con Apache Spark (Word Count) • Cargar JSON de Tweets (Statuses) • Crear un programa que consume del stream (simulado) • Obtener los lenguajes de programación más hablados • Por usuario, por url, por localización
  • 3. Qué es Apache Spark?
  • 4. Qué es Spark? Apache Spark™ is a fast and general engine for large-scale data processing. • Procesamiento In-memory (preferentemente) • Framework de Procesamiento Unificado • Para Ingenieros & Data Scientists
  • 5. Principales Pilares Task Scheduler • Prepara los jobs a través de DAG (Directed acyclic graph) • Concatena funciones para ejecutar los stages • Cache-aware; considera utilización & localización de datos (data locality) • Partitioning-aware para reducir shuffles por la red RDD (Resilient Distributed Datasets) • Estructura de datos Inmutable (In-memory) • Tolerante a fallas (Se rearma en caso de falla) • Estructura de datos que puede ser operada en paralelo • Rica interfaz de Transformations & Actions
  • 8. DISCLAIMER Para que los ejercicios sean realizados dentro del tiempo establecido para el laboratorio los datasets son chicos. Las soluciones que desarrollamos acá pueden escalar para cientos de servidores y Terabytes de datos Las técnicas se aplican a mayor Volumen y Velocidad: Internet Of Things (IoT), Logs, games, mobile, etc
  • 10. Declarando Variables val à declara variables inmutables (final en Java)
  • 11. Declarando Función Crear una función que calcule el valor al cubo def à declara función scala> cube(10) res0: Int = 1000
  • 12. Usar MAP NOTA: Es una función, no la estructura de datos! Aplicar la función cube() a la lista de números myNumbers scala> myNumbers.map(cube(_)) scala> myNumbers.map(cube)
  • 13. Usar Map and Tuples Tuples son estructura auxiliares que permiten llevar multiplos valores sin necesidad de crear clases (VO) scala> myNumbers.map(n => (n, cube(n))) res1: List[(Int, Int)] = List((1,1), (2,8), (5,125), (4,64), (7,343), (3,27)) scala> myNumbers.map(n => (n, cube(n))).foreach(println) (1,1) (2,8) (5,125) (4,64) (7,343) (3,27)
  • 14. Usar Filter Aplicar Filter a la lista myNumbers dejando solo impares scala> myNumbers.filter(n => (n % 2) == 1) res6: List[Int] = List(1, 5, 7, 3) scala> myNumbers.filter(_ % 2 == 1) res6: List[Int] = List(1, 5, 7, 3)
  • 15. Usar Reduce Sumar todos los elementos de la lista scala> myNumbers.reduce((x, y) => x + y) res10: Int = 22 scala> myNumbers.reduce(_ + _)
  • 16. CHALLENGE Sumar todos los números pares en el rango de 0-99 TIP: scala> val numbers = Range(0, 100) numbers: scala.collection.immutable.Range = Range(0, 1, ..) scala> numbers.filter(_ % 2 == 0).reduce(_ + _) res2: Int = 2450
  • 17. Creando el primero pipeline con Apache Spark Código Fuente: https://github.com/socialmetrix/wisit14
  • 26. Apache Spark es Lazy! Viste que no pasó nada hasta la última linea? Nada es procesado entre Transformaciones. Solo se ejecuta cuando se realiza una Acción (top)
  • 27. API muy expresiva, mucho más operaciones! Ver: https://spark.apache.org/docs/latest/api/scala/#org.apache.spark.rdd.RDD
  • 28. CHALLENGE El resultado no es muy interesante, porque las principales palabras son stopwords, remueverlas para dar mayor significado
  • 30. Propuesta Crear un listado de los lenguajes más tweetados, similar al listado de lenguajes que crea Github http://adambard.com/blog/top-github-languages-2014/
  • 31. Consideraciones • Dataset contiene un JSON por linea (one-liner) • Hay que interpretar JSON • Pueden haber erroes en los JSON – Lineas vacias – Lineas malformadas / Diferentes schemas
  • 32.
  • 33. Obtener las TOP HASHTAGS (batch mode) Ver archivo ./src/main/scala/smx/sql/TopHashtags.scala Compilar y Ejecutar ./sbt/sbt assembly spark-submit --class smx.sql.TopHashtags target/scala-2.10/wisit2014-spark-assembly-0.0.1.jar data/tweets-20141126-sample.json
  • 34. Procesando tweets en Real-time
  • 35. Stream es una secuencia de RDD
  • 36. Streaming Ver archivos ./src/main/scala/smx/utils/SocketServer.scala Iniciar SocketServer (simula Twitter Streaming) java -cp target/scala-2.10/wisit2014-spark-assembly-0.0.1.jar smx.utils.SocketServer data/tweets-20141126-sample.json
  • 37. Streaming (cont.) Ver archivo ./src/main/scala/smx/stream/StreamProcessor.scala Iniciar Streaming Processor spark-submit --class smx.stream.StreamProcessor target/scala-2.10/wisit2014-spark-assembly-0.0.1.jar
  • 39. CHALLENGE Cambiar de Hashtags para TOP Usuarios TIP: El usuario es user.screen_name en el JSON
  • 40. Usando SparkStreaming con Twitter (necesita conexión de internet) Training Oficial 2014 Stream Processing with Spark Streaming https://databricks-training.s3.amazonaws.com/realtime-processing-with- spark-streaming.html
  • 42. Mucha documentación disponible https://spark.apache.org/documentation.html http://spark-summit.org/2014/training http://arjon.es/tag/spark/ http://www.slideshare.net/frodriguezolivera/apache-spark- 41601032 First Steps to Scala http://www.artima.com/scalazine/articles/steps.html http://shop.oreilly.com/ product/0636920028512.do
  • 43. Gracias & Obrigado! Gustavo Arjones gustavo@socialmetrix.com @arjones jobs@socialmetrix.com