Las 35 mejores herramientas de marketing gratuitas para Twitter
¿Tu empresa ya está en Twitter? Esta red es una de las favoritas de los marketers digitales ya que, además de sus grandes posibilidades publicitarias, pone a tu disposición una manera fantástica de estar en contacto con clientes y público objetivo en tiempo real.
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
6. Plataforma Unificada
7. Hands On!
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
9. Introducción a #Scala
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
18. Contar Palabras
19. data/don-‐quijote.txt.gz
20. data/don-‐quijote.txt.gz
21. data/don-‐quijote.txt.gz
22. data/don-‐quijote.txt.gz
23. data/don-‐quijote.txt.gz
24. data/don-‐quijote.txt.gz
25. data/don-‐quijote.txt.gz
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
29. Manipulando Tweets
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. 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
33. Procesando tweets en Real-time
34. Stream es una secuencia de RDD
35.
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
36.
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
37. h)p://localhost:4040/
38. CHALLENGE Cambiar de Hashtags para TOP Usuarios TIP: El
usuario es user.screen_name en el JSON
39. 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
40. Donde aprender más?
41. 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
42. Gracias & Obrigado! Gustavo Arjones
gustavo@socialmetrix.com @arjones jobs@socialmetrix.com