Cuando hablamos de procesamiento de bases de datos en python, pensamos inmediatamente en la biblioteca pandas. Sin embargo, cuando se trata de bases de datos demasiado masivas, los cálculos se vuelven demasiado lentos. Afortunadamente, existe otra biblioteca de python, bastante cercana a pandas, que permite procesar cantidades muy grandes de datos : PySpark.
Apache Spark es un Framework de código abierto desarrollado por el AMPLab de la UC Berkeley que permite procesar bases de datos masivas mediante computación distribuida, una técnica que consiste en explotar varias unidades de computación distribuidas en clusters en beneficio de un mismo proyecto para dividir el tiempo de ejecución de una consulta. Spark fue desarrollado en Scala y es mejor en su lenguaje nativo. Sin embargo, la biblioteca PySpark ofrece utilizarla con el lenguaje Python, manteniendo un rendimiento similar al de las implementaciones de Scala. Por lo tanto, Pyspark es una buena alternativa a la biblioteca Pandas cuando se quiere tratar con grandes conjuntos de datos que consumen demasiado tiempo de cálculo.
Arquitectura de Spark :
En primer lugar, es importante entender las bases del funcionamiento de Spark.
Cuando interactúas con Spark a través de PySpark, envías instrucciones al Driver. Es el conductor que coordina todas las operaciones. Puede comunicarse con el controlador a través de un objeto SparkContext. Este objeto coordina los diferentes cálculos en los distintos clusters. La gran ventaja de Spark es que el código es completamente independiente del SparkContext. Por lo tanto, puede desarrollar su código localmente en cualquier máquina.
En este artículo, presentaremos algunos de los elementos centrales de Spark, empezando por los RDD, la estructura más básica de Spark. A continuación, veremos el tipo DataFrame, una estructura más rica que los RDD, optimizada para el machine learning.
RDD - Datos distribuidos resistentes
Un RDD es la representación de Spark de un array de datos. Es una colección de elementos que puede utilizarse para contener tuples, diccionarios, listas…
La ventaja de un RDD reside en su capacidad para evaluar el código de forma perezosa: el lanzamiento de los cálculos se pospone hasta que sea absolutamente necesario. Por ejemplo, al importar un archivo, sólo se crea un puntero al mismo. En realidad, el cálculo sólo se realiza en el último momento, cuando se quiere visualizar o utilizar un resultado. Para profundizar en la manipulación de un RDD, puede utilizar la documentación disponible aquí
Un RDD se lee línea por línea, lo que lo hace eficiente para procesar archivos de texto (contar el número de ocurrencias de cada palabra en la integral de los miserables, por ejemplo), pero es una estructura inadecuada para cálculos por columna. Por lo tanto, para realizar machine learning necesitamos introducir una nueva estructura: DataFrames.
DataFrame pyspark
El DataFrame de pyspark es la estructura más optimizada en Machine Learning. Utiliza las bases subyacentes de un RDD pero se ha estructurado en columnas además de filas en una estructura SQL. Su forma está inspirada en el DataFrame del módulo Pandas.
Gracias a la estructura de DataFrame, podemos por tanto realizar potentes cálculos a través de un lenguaje familiar (ya que es similar a pandas), a la vez que evitamos el coste de entrada de aprender un nuevo lenguaje funcional: Scala.
Spark SQL es un módulo de Spark que permite trabajar con datos estructurados. Por lo tanto, dentro de este módulo se ha desarrollado el Spark DataFrame.
Spark SQL tiene una documentación de una sola página que es bastante rica tanto en ejemplos como en explicaciones. Al contrario de lo que pueda encontrar en Internet, esta documentación es el único documento que está siempre actualizado con la última versión de Spark.
Este artículo es sólo una introducción a las principales nociones de Pyspark. Nuestros cursos de formación contienen un módulo entero sobre el aprendizaje de esta herramienta esencial para el manejo de datos masivos. Si quieres dominar esta herramienta, déjate tentar por uno de nuestros cursos de formación en ciencia de datos.