Diferencias entre Pandas y PySpark

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. Entonces un Dataframe en pandas es la estructura de datos clave que va a permitir la manipulacion de datos tabulados en filas y columnas.
En temas de rendimiento la máxima cantidad de registros que soporta pandas es de alrededor de 2 millones. Si tienes un archivo con numero de registros mayor a esta cantidad una buena opción seria trabajarlo con Spark.

En la manipulación de los datos tales como transformaciones con funciones personalizadas es muy sencillo, ya que cada columna se puede trabajar por separado seleccionándola directamente y aplicar métodos de Numpy predefinidos o simplemente convirtiéndola a una lista para procesarla y nuevamente integrarla como una columna nueva al Dataframe, lo cual facilita mucho la parte de las transformaciones. Una característica muy importante es que se puede acceder una fila especifica mediante su posición con el comando “iloc” que indexa automáticamente el Dataframe.

Dataframes en Pyspark

Spark es una tecnología basado en la computación distribuida la cual proporciona una interfaz para la programación entera de Clusters (núcleos de computación) con el paralelismo de datos implícito y tolerante a fallos. Generalmente esta más enfocado en la data que es almacenada de manera columnar ya que esta hace más eficaz el procesamiento en paralelo.

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.

comments powered by Disqus