SlideShare a Scribd company logo
1 of 43
Download to read offline
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

More Related Content

What's hot

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
 

What's hot (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 to 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 to 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
 

More from 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
 

More from 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
 

Recently uploaded

International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)GDGSucre
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíassuserf18419
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx241521559
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITMaricarmen Sánchez Ruiz
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricKeyla Dolores Méndez
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxLolaBunny11
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan JosephBRAYANJOSEPHPEREZGOM
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...silviayucra2
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfJulian Lamprea
 

Recently uploaded (10)

International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptx
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdf
 

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