Traducción de código para que los script sean más eficaces en un entorno de producción

En este artículo voy a explicar el escenario en el que he estado trabajando el último año traduciendo código de Pandas a PySpark para mejorar los tiempos de ejecución y hacer más eficientes los scripts en un entorno de producción. Empecemos entendiendo estas tecnologías.

Pandas es una librería para trabajar con conjuntos de datos. Tiene funciones para analizar, limpiar, explorar y manipular datos. Pandas es muy adecuado para trabajar con conjuntos de datos de tamaño pequeño o mediano en una sola máquina. Cuando llega el momento de trabajar a mayor escala, empezamos a hablar de PySpark, que está diseñado para el procesamiento distribuido de grandes conjuntos de datos en varias máquinas escribiendo aplicaciones Spark mediante las API de Python. Tiene un motor de análisis unificado para el procesamiento de datos a gran escala.

Convertir un DataFrame de Pandas en un DataFrame de PySpark puede ser necesario cuando necesitas escalar tu procesamiento de datos para manejar conjuntos de datos más grandes, Spark ofrece la posibilidad de ejecutar operaciones en múltiples máquinas, a diferencia de Pandas, lo cual es esencial.

Uno de los principales inconvenientes de Pandas son sus problemas de escalabilidad y rendimiento. Pandas no está diseñado para la computación distribuida, y puede tener problemas con conjuntos de datos grandes o complejos que superen la capacidad de memoria de una sola máquina. Pandas también depende del intérprete de Python, que no es muy eficiente para el procesamiento paralelo o concurrente. Pandas puede ser lento y consumir mucha memoria para ciertas operaciones, como ordenar, unir o añadir grandes marcos de datos.

Una de las principales ventajas de PySpark es su escalabilidad y capacidad de rendimiento. PySpark puede manejar conjuntos de datos masivos y complejos que abarcan múltiples nodos, y aprovechar las capacidades de computación distribuida y en memoria de Spark para acelerar el procesamiento de datos y las tareas de aprendizaje automático. También admite la evaluación perezosa, lo que significa que sólo ejecuta operaciones cuando se desencadena una acción y evita cálculos innecesarios. PySpark es adecuado para trabajar con big data, streaming de datos o aplicaciones de advanced analytics y machine learning.

Antes de empezar a traducir código Pandas a PySpark, necesitamos crear una Spark Session. Es el punto de entrada a la programación de Spark con la API DataSet y DataFrame. PySpark proporciona herramientas de transformación de datos en un módulo llamado pyspark.sql.functions, este módulo almacena muchos métodos funcionales para transformar datos como convertir a DateTime, concatenar columnas, ventanas, tablas dinámicas, etc.

Uno de los conjuntos de datos en los que he estado trabajando tenía 127 millones de datos, y todo el proceso estaba basado en Pandas, el notebook estaba usando 96 vCPU y 384 GiB de memoria, todo el script estaba tardando más de 30 minutos en completarse. El conjunto de datos tenía alrededor de 20 columnas de tipo string, datetime, integer y float. Pasamos todo el código a PySpark utilizando 2 vCPU y 8 GiB de memoria y el tiempo total para ejecutar todo el script fue de unos 5 minutos.

Aquí podemos ver un ejemplo sobre una transformación de pivote a traducir. El cambio más notable fue en el tiempo de procesamiento con una diferencia de 5 minutos en Pandas y 43 segundos en PySpark.

Con datos que crecen exponencialmente, operaciones complejas como la fusión o agrupación de datos requieren paralelización y computación distribuida. Como vimos en el ejemplo anterior, estas operaciones son muy lentas y bastante caras y se hacen difíciles de manejar con un DataFrame de Pandas, que no soporta paralelización.

Para resumir me gustaría añadir las principales ventajas de PySpark en términos de rendimiento, velocidad y consumo de memoria:

Rendimiento

Pandas se utiliza para manipular y analizar conjuntos de datos de menos de 10 GB. Por lo tanto, PySpark, cuando se utiliza con un sistema de computación distribuida, da mejor rendimiento que pandas y además utiliza conjuntos de datos distribuidos resilientes (RDDs) para trabajar en paralelo sobre los datos.

Velocidad

Para grandes conjuntos de datos, PySpark es siempre más rápido que Pandas. Podemos realizar cálculos paralelos sobre conjuntos de datos utilizando PySpark. Spark utiliza caché en memoria, cosa que Pandas no tiene.

Consumo de memoria

Pyspark hace un procesamiento perezoso. No mantiene todos los datos en memoria. Cuando se necesitan datos, sólo se recuperan los datos del disco. Pero Pandas mantiene todos los datos en memoria. Por lo tanto, el consumo de memoria es siempre mayor con Pandas.

En conclusión, para conjuntos de datos pequeños o medianos, Pandas es una mejor opción, ya que puede caber en la memoria de una sola máquina, pero para grandes cantidades de datos PySpark muestra un mejor rendimiento en todos los pasos porque está diseñado para aprovechar los recursos informáticos distribuidos para procesar que grandes cantidades de datos a través de un clúster de máquinas y es más adecuado para el procesamiento de datos complejos que implica múltiples etapas de transformación de datos y análisis.

 

Imagen: Unsplash | Joshua Aragon

+ posts

Data Engineer at Keepler. "As my main job I develop ETL processes in Cloud environments to help enterprises to achieve better performance in their data, which helps them to get better insights. Working in Keepler is great and gives me the opportunity to learn and grow as a professional in other areas of big data that I am really passionate about."

0 comentarios

Deja un comentario

You May Also Like

La nube como tecnología que impulsará la sostenibilidad

La nube como tecnología que impulsará la sostenibilidad

La lucha contra el cambio climático y la contaminación son dos de los principales retos a los que se enfrenta la sociedad actual debido a que durante los últimos años se han desarrollado modelos comerciales, infraestructuras y tecnologías las cuales no son sostenibles...

leer más

Descubre más desde New

Suscríbete ahora para seguir leyendo y obtener acceso al archivo completo.

Seguir leyendo