Esta notebook fue creada originalmente como un blog post por Raúl E. López Briega en Mi blog sobre Python. El contenido esta bajo la licencia BSD.
Una de las nuevas estrellas en el análisis de datos masivos es Apache Spark. Desarrollado en Scala, Apache Spark es una plataforma de computación de código abierto para el análisis y procesamiento de grandes volúmenes de datos.
Algunas de las ventajas que nos ofrece Apache Spark sobre otros frameworks, son:
En el corazón de Apache Spark se encuentran los RDDs. Los RDDs son una abstracción distribuida que le permite a los programadores realizar cómputos en memoria sobre grandes clusters de computadoras sin errores o pérdidas de información. Están especialmente diseñados para el análisis de datos interactivo (data mining) y para la aplicación de algoritmos iterativos (MapReduce). En ambos casos, mantener los datos en la memoria puede mejorar el rendimiento en una gran proporción. Para lograr la tolerancia a fallos de manera eficiente, RDDs utiliza una forma restringida de memoria compartida. Los RDDs son los suficientemente expresivos como para capturar una gran variedad de cálculos.
Para instalar Apache Spark en forma local y poder comenzar a utilizarlo, pueden seguir los siguientes pasos:
En primer lugar, necesitamos tener instalado Oracle JDK. Para instalarlo en Ubuntu podemos utilizar los siguientes comandos:
$ sudo add-apt-repository ppa:webupd8team/java $ sudo apt-get update $ sudo apt-get install oracle-jdk7-installer
Luego nos instalamos las herramientas para trabajar con Scala, SBT con el siguiente comando:
$ sudo apt-get install sbt
Después nos descargamos la última versión de Apache Spark desde aquí
Ahora descomprimimos el archivo:
$ tar -xvf spark-1.0.2.tgz
Nos movemos a la carpeta recién descomprimida y realizamos la compilación de Apache Spark utilizando SBT. (tener paciencia, es sabido que Scala tarda mucho en compilar)
$ cd spark-1.0.2 $ sbt/sbt assembly
Opcionalmente, para facilitar la utilización de Apache Spark desde la línea de comando, yo modifique mi archivo .bashrc para incluir los siguientes alias:
$ echo "alias ipyspark='IPYTHON_OPTS="notebook --pylab inline" ~/spark-1.0.2/bin/pyspark'" >> ~/.bashrc $ echo "alias pyspark='~/spark-1.0.2/bin/pyspark'" >> ~/.bashrc $ echo "alias spark='~/spark-1.0.2/bin/spark-shell'" >> ~/.bashrc
Ahora simplemente tipeando pyspark
nos abre el interprete interactivo de Python con Apache Spark, tipeando spark
nos abre el interprete interactivo de Scala, y tipeando ipyspark
nos abre el notebook de Ipython integrado con Apache Spark!
$ ./bin/pyspark #o pyspark si creamos el alias
Ahora llegó el momento de ensuciarse las manos y probar Apache Spark, vamos a hacer el típico ejercicio de wordcounts; en este caso vamos a contar todas las palabras que posee la Biblia en su versión en inglés y vamos a ver cuantas veces aparece la palabra Dios(God). Para esto nos descargamos la versión de la Biblia en texto plano del proyecto Gutemberg.
In [1]:
# Comenzamos con algunos imports.
# No necesitamos importar pyspark porque ya se autoimporta como sc.
from operator import add
import pandas as pd
In [2]:
lineas = sc.textFile("/home/raul/spark-1.0.2/examples/data/Bible.txt") # usamos la función textFile para subir el texto a Spark
In [3]:
# Mapeamos las funciones para realizar la cuenta de las palabras y generamos el RDD.
cuenta = lineas.flatMap(lambda x: x.split(' ')) \
.map(lambda x: (x.replace(',' , '').upper(), 1)) \
.reduceByKey(add)
In [4]:
# Creamos la lista con las palabras y su respectiva frecuencia.
lista = cuenta.collect()
In [5]:
# Creamos un DataFrame de Pandas para facilitar el manejo de los datos.
dataframe = pd.DataFrame(lista, columns=['palabras', 'cuenta'])
In [6]:
# Nos quedamos solo con las palabras que hacen referencia a Dios
god = dataframe[dataframe['palabras'].apply(lambda x: x.upper() in ['GOD', 'LORD', 'JESUS', 'FATHER'])]
god
Out[6]:
In [7]:
# Realizamos un gráfico de barras sobre los datos
god.set_index('palabras').plot(kind = 'bar')
Out[7]:
In [8]:
# Realizamos la sumatoria de las 4 palabras combinadas
god.sum()
Out[8]:
Como demuestra el ejemplo, Dios sería nombrado en la Biblia, ya sea como lord, god, jesus o father; unas 11485 veces!
Apache Spark es realmente una herramienta muy prometedora, con ella podemos analizar datos con un rendimiento muy alto y combinado con otras herramientas como Python, Numpy, Pandas e IPython; se convierten en un framework sumamente completo y efectivo para el análisis de grandes volúmenes de datos en forma muy sencilla.
Para más información sobre Apache Spark, pueden visitar su la sección de ejemplos de su página oficial.
Espero les haya sido de utilidad este notebook).
Saludos!!