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:
$ sudo add-apt-repository ppa:webupd8team/java $ sudo apt-get update $ sudo apt-get install oracle-jdk7-installer
$ sudo apt-get install sbt
$ tar -xvf spark-1.0.2.tgz
$ cd spark-1.0.2 $ sbt/sbt assembly
$ 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
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.
# Comenzamos con algunos imports.
# No necesitamos importar pyspark porque ya se autoimporta como sc.
from operator import add
import pandas as pd
lineas = sc.textFile("/home/raul/spark-1.0.2/examples/data/Bible.txt") # usamos la función textFile para subir el texto a Spark
# 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)
# Creamos la lista con las palabras y su respectiva frecuencia.
lista = cuenta.collect()
# Creamos un DataFrame de Pandas para facilitar el manejo de los datos.
dataframe = pd.DataFrame(lista, columns=['palabras', 'cuenta'])
# 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
palabras | cuenta | |
---|---|---|
2867 | FATHER | 814 |
7329 | GOD | 3330 |
8902 | LORD | 6448 |
21404 | JESUS | 893 |
# Realizamos un gráfico de barras sobre los datos
god.set_index('palabras').plot(kind = 'bar')
<matplotlib.axes.AxesSubplot at 0x7f071e10ea10>
# Realizamos la sumatoria de las 4 palabras combinadas
god.sum()
palabras FATHERGODLORDJESUS cuenta 11485 dtype: object
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!!