Dos de las librerías más utilizadas en el mundo de Python para el procesamiento de datos son Pandas y Pyspark(libreria de Python para spark) con características muy similares entre ellas incluyendo los nombres de algunos métodos o funciones. Generalmente la forma más común para tratar datos provenientes de archivos Excel, CSV, Parquet o Json es mediante los DataFrames. Partiremos desde este punto a describir por separado los Dataframes de pandas y los Dataframes de Python.
DataFrames en Pandas
Para definir un dataframe en pandas se debe tener en cuenta que la libreria Pandas esta construida con el paquete Numpy que es una libreria de python para la manipulacion de matrices y vectores n-dimensional.
Continúa leyendo este artículo en el enlace Diferencias entre Pandas y PySpark – Information Workers (iwco.co)
El mundo de operación de Spark es muy diferente al de Pandas ya que en Spark entran en juego una serie de actores necesarios para completar una petición del usuario. A continuación describiremos los más básicos.
- Job: es una pieza de código que lee alguna entrada desde usuario.
- Etapas: los Jobs son divididos en etapas (Stages) y estas son divididas basados en los limites computacionales.
- Tareas: cada etapa tiene algunas tareas (Tasks), una tarea por partición. Una tarea es ejecutada sobre una partición sobre un ejecutor (Executor).
- Ejecutor: un Ejecutor es el proceso responsable de ejecutar una tarea.
- Master: es la maquina sobre la cual corre el programa líder (Driver Program).
- Slave: es la maquina sobre la cual correo el programa de ejecución (Executor Program).
La siguiente imagen resume todo el entorno de operación de Spark
Dentro de Spark se encuentran los RDD (Resilient Distributed Dataset) que es básicamente una colección distribuida inmutable de conjuntos de objetos. Un Dataframe en Pyspark está construido en base a los RDD y a diferencia de los Dataframes de pandas, estos se encuentran organizados en columnas permitiendo consultas más rápidas sobre conjunto determinado de datos aprovechando la computación en paralelo. Está diseñado para trabajar con grandes volúmenes de datos muy por encima de los 2 millones de registros.
La manipulación de los datos puede ser un poco más complicada que con Pandas, partiendo del hecho de que un Dataframe de Spark está basado en los RDD lo que quiere decir que no se pueden aplicar las funciones personalizadas directamente al Dataframe como se hace en pandas. Para obtener el mejor rendimiento se debe cambiar un poco la forma acceder y operar la data puesto que Spark está basado en un formato columnar.
Por ejemplo: acceder a una fila especifica en Spark requiere que tengas una columna con un numero incremental que funcione como índice guía. Tampoco se puede agregar una lista directamente a el Dataframe como una nueva columna como se hace en pandas.
Estas son algunas de las diferencias basicas entre un dataframe de Pandas y un dataframe de spark. Generalmente cuando se trabaja con computacion paralela como los clusters de databricks, es mejor trabajar con pysark obviamente los archivos a trabajar seran de grandes volumnes para hacer un buen provecho de los recursos. Pero si los archivos son pequeños es preferible trabajar con pandas y aprovechar toda su versatibilidad.