Primer ejemplo con apache spark

Hace algunas semanas atrás que empezamos a trabajar con apache spark en el máster, brevemente les contare mis impresiones desde mi punto de vista como principiante.

Apache spark me gusto, ¿por qué? porque se puede programar en Scala (además de Python y Java),  la API de Scala lo simplifica mucho y la cantidad de código a teclear es (considerablemente) menor a la necesaria para hacer la misma tarea en Java, aunque aquí debo hacer un paréntesis, ya que con la entrada de Java 8 y las lambda expresión la cantidad de código será menor pero insisto la API de Scala a mi modo de ver lo hace mas sencillo.

Nos permite hacer operaciones con mucha data (quizás no Big Data, es decir no hablamos de TeraBytes) sin necesidad de usar Hadoop, me gustaría hacer hincapié en esto ya que muchos piensan que Big Data es Hadoop y NO, no es así, mi concepto de Big Data es un poco mas amplio y contempla mas cosas, aquí me refiero específicamente a la API MapReduce de Hadoop la cual es mas complicada de usar que la de Spark, no obstante si necesitamos trabajar con una cantidad de datos considerable que requiera del uso de HDFS, podemos desde Spark acceder a este sistema de archivo u algún otro como por ejemplo Amazon S3.

Por último decirles que Spark es mas rapido, esto se debe a su arquitectura, ya que este trabaja en memoria (todo en memoria si tiene la capacidad de cargar todos los datos por completo) y pues si llegamos a hacer varias tareas (lo que técnicamente sería reutilizar los RDD ya guardados en memoria) con los datos en memoria es cuando mas jugo se le sacará a Spark.

Sinceramente si alguien discrepa de mi o coincide me entusiasmaría mucho que comparta su opinión ya que todo este mundo que envuelve el Big Data me tiene super enganchado.

 Ahora bien vamos con los ejemplos, estas formaban parte de la primera tarea de Spark que tuvimos que realizar, y consiste en 2 ejemplos:

  1. Dado un fichero de texto en formato csv con información de medallistas olímpicos, obtener el numero de medallas por edad.
  2. Dado el mismo fichero de texto anterior, y un esquema de puntuación por tipo de medalla obtener un ranking de medallistas olímpicos.

He aqui el código:

 

Una última cosa que es bueno saber para aquellos que como yo están empezando con Spark y sus RDD, Los RDD tienen 2 tipos de operaciones: transformaciones y acciones, las primeras son operaciones que como resultado nos devuelven otro RDD y las acciones son aquellas que hacen “algo” sobre los datos como por ejemplo el foreach de mi código,  utilizado para mostrar por pantalla los valores finales, además los RDD (como hasta ahora lo entiendo) son las instrucciones a realizar sobre los datos, mas no almacenan la información, además estás instrucciones no se realizan de inmediato, sino que al contrario estos tienen un funcionamiento lazy, esto significa que se ejecutan cada vez que se realiza una operación de tipo acción.

Otra sugerencia, no duden en cacharrear con la consola de spark, de hecho el primer ejercicio lo llegue a hacer por la consola (sin los JavaBeans) y el practicar por aquí si que ayuda a conocer los operaciones a utilizar sobre los RDD.

Aquellos interesados en descargar el código, les dejo la dirección del ejercicio en mi repositorio github

El esqueleto del ejercicio esta en el repositorio del que fue nuestro profesor y pueden acceder a el haciendo clic aquí.

Cualquier material, idea o contenido que quieres compartir, no dudes en hacerlo, ya que bien recibido será. Ahora si para cerrar les dejo el enlace a un libro que hasta ahora me esta pareciendo muy bueno para aprender Spark (además con ejemplos elaborados en Java, Scala y Python).

Qué es Big Data

Hace una semana en una clase del máster mas enfocada a negocio, retos y oportunidades del Big Data, hicimos un ejercicio bastante interesante, este consistió en que cada uno de nosotros brevemente plasmara su definición de Big Data, donde podría aplicarse y que beneficios podría arrojarnos.

Pudimos ver las definiciones de algunos compañeros, coincidir y discrepar en algunos puntos pero para mí fue una actividad muy enriquecedora sin importar si coincidíamos o no, es por eso que comparto con ustedes mi definición de Big Data.

¿Qué es Big Data?

Big Data contempla las nuevas herramientas, tecnologías y (nuevos) los conceptos relacionados con la adquisición de (mucha) data (volumen), de distinto tipo (variedad) que a su vez podría estar no estructurada, con unos aspectos opcionales pero que también puede marcar la diferencia para definirlo como “really Big Data” como la movilidad (por ejemplo la adquisición de información mediante IoT o dispositivos móviles) y el tiempo real. De hecho contemplo el Big Data como unas 2 vertientes que pueden o no trabajar en conjunto:

  • Ingeniería: Enfocado en el uso de las herramientas por ejemplo al tratar verdaderamente mucha data con poco o nada de análisis, un rol de esta vertiente sería el Data Arquitect, esa persona encargada de manipular estructurar los datos, manipularlos, masticarlos y dejarlos bien preparados para aquellos encargados de hacer análisis sobre los datos, esta persona trabajaría con Hadoop, Pig, Spark.
  • Científica: Donde sin que estrictamente se tenga que trabajar con muchísima data (podría ser tanto small Data como Big Data) se lleva a cabo análisis mayormente de tipo estadístico como análisis predictivos, construyendo modelos, un rol de esta vertiente sería la del Data scientist, esa persona encargada de hacer data mining, machine learning, etc.

Y ¿yo qué quiero? ¿qué busco?

YO aspiro a convertirme en un Big Data Architect y seguir aprendiendo y profundizando mis conocimientos en Data mining, Machine learning, estadísticas e investigación de operaciones para forjarme un perfil mas científico.

¿Qué es lo que mas me ha interesado?

Aprendizaje automático (machine learning) y los nuevos enfoques para el procesamiento y almacenamiento de grandes volúmenes de datos (Spark, Flink, Hadoop, Cassandra, HBase).

¿Donde creo que podría aplicarse?

A nivel de ingeniería para almacenamiento por ejemplo de data del hogar (IoT), por ejemplo un termostato inteligente y configurable donde poder gestionar a través de una plataforma de Internet poder gestionar cuando se encienda/apague la calefacción, ver histórico de funcionamiento de la calefacción y sobre estos datos hacer análisis estadísticos.

¿Qué beneficios podría arrojar ?

En base al ejemplo anterior Dinero (ahorro de energía siguiendo con el ejemplo del termostato) o clientes (sistemas de recomendación de productos), otros casos serian por ejemplo tiempo (aprendizaje automático para la elaboración de prestamos preconcebidos o análisis de un cliente al momento de solicitar una hipoteca o préstamo por internet).

Ahora bien, una vez conocido mi concepto de Big Data ¿Coincides con mi definición? ¿discrepas?,  ¿Cual es tu concepto del Big Data?