Desafíos del Análisis de Datos con Spark: Scala y PySpark — La Aventura de un Junior.

LUCIA DOMINGUEZ BERMEJO
7 min readMar 4, 2024

Hace unos meses, me lancé a una nueva aventura personal y profesional con el objetivo de sumergirme en el fascinante mundo del Big Data. Esta decisión no solo reflejaba una necesidad personal de volver a mis raíces estudiantiles y profesionales, sino también el deseo de explorar un universo que ha evolucionado a pasos agigantados en los últimos años. Enfrentar este desafío no solo significaba superar barreras a nivel personal y familiar, sino también abrazar la incertidumbre que conlleva el aprendizaje y la adaptación a nuevas tecnologías.

Durante estos meses, he tenido la oportunidad de explorar diversas herramientas y sumergirme en proyectos apasionantes dentro del Bootcamp “Big Data, IA y Machine Learning Full Stack” de Keepcoding. Dentro de este emocionante proceso, quiero compartir mi experiencia particular con Apache Spark, una herramienta que ha surgido como un pilar para el procesamiento eficiente de datos. Sin embargo, enfrentarse a la implementación de Spark con Scala y PySpark ha presentado sus propios desafíos.

La teoría es esencial, pero la verdadera comprensión se obtiene mediante la práctica. Para poner a prueba mis habilidades, decidí realizar un proyecto de análisis de datos sobre la felicidad en diferentes países, utilizando dos conjuntos de datos: uno hasta el 2020 y otro exclusivo del 2021, ambos en formato CSV. Mi objetivo era utilizar Apache Spark, ya sea con Scala o Python, aprovechando la capacidad de Spark para compatibilizar ambos lenguajes y utilizar diferentes entornos de trabajo.

Maximizar el rendimiento es un desafío ya en si mismo, dentro del tratamiento de grandes cantidades de datos. Por ello, la velocidad de procesamiento en Apache Spark es una de sus principales fortalezas, tanto en Scala como en PySpark, la optimización de código y la gestión eficiente de la memoria son esenciales para garantizar tiempos de ejecución rápidos y una utilización eficaz de los recursos. También tenemos que tener en cuenta la capacidad de Spark para escalar horizontalmente como un punto clave. Gracias a la distribución en clústeres y su estrategia de particionamiento y distribución, permite aprovechar al máximo la arquitectura distribuida de Spark y evitar los cuellos de botella en el rendimiento.

Desafíos Enfrentados:

Estudio de los Datasets:

El primer desafío fue comprender los datasets, entender la estructura de los datos y determinar qué indicadores serían útiles para el proyecto. Entender los datos es fundamental para formular las preguntas correctas y extraer los insights más valiosos.

Elección del Lenguaje:

La elección entre Scala y PySpark fue mi primer dilema. Scala es el lenguaje nativo de programación de Apache Spark, lo que lo hace más rápido, pero ya tenía experiencia previa con Python, por lo que usar su librería de PySpark inicialmente era más sencillo. ¿Por qué no usar ambos? Afronté el desafío de trabajar con ambos lenguajes para aprovechar al máximo la experiencia de aprendizaje.

Elección del Entorno de Trabajo:

Decidir dónde implementar cada lenguaje fue un desafío adicional, ya que en la actualidad existen diversos entornos de trabajo.

Opté por “DataBricks” para Spark Scala debido a su integración estrecha con Apache Spark y la facilidad de manejo. De esta forma evitaba los problemas de compatibilidades de versiones que me había dado Scala al instalarlo de forma local en mi sistema Ubuntu. Además “DataBricks” te permite un pequeño entorno para la generación de gráficos, que facilita mucho la generación de insights visuales cuando es necesario.

Para PySpark, elegí un Jupyter Notebook, que ofrece flexibilidad y ha sido confiable en términos de conectividad. Aquí para la generación de visuales se pueden usar librerías gráficas de Python si es necesario como Matplotlib, pero también a parte de PySpark, usar otras librerías como Pandas o Numpy.

Gestión de Clústeres en DataBricks:

En la versión gratuita de “DataBricks”, la inactividad del clúster durante 60 minutos daba como resultado su desconexión, requiriendo recrear el clúster en cada parada. Una limitación que no se aplica en la versión de pago.

Resolución de Preguntas en Ambos Lenguajes:

A través de una serie de preguntas analíticas, exploré la diversidad de Apache Spark con Scala y PySpark, obteniendo resultados comparables y valiosos insights. La mayor dificultad fue las variantes de sintaxis entre ambos lenguajes.

Aquí os dejo las preguntas y sus resultados:

1 . ¿Cuál es el país más “feliz” del 2021?

El país según el indicador “Ladder Score”, más feliz fue FINLANDIA.

2. ¿Cuál es el país más “feliz” del 2021 por continente?

En este caso usamos la columna “Regional Indicator” para agrupar por Continentes.

En este cuadro podemos observar una gran diferencia entre Europa del Este con Finlandia a la cabeza y el sur de Asia con Nepal.

3. ¿Cuál es el país que más veces ocupó el primer lugar en todos los años?

En este caso me enfrenté a tener que integrar datos de las dos tablas para incluir el país con mayor nivel de “felicidad” del año 2021. Al incluir este dato se produce un empate en número de años en el primer puesto del ranking entre Dinmarca y Finlandia. Dos países en la misma región, lo que nos hace pensar que hay factores que puedan estar relacionar a estos dos países.

4. ¿Qué puesto de Felicidad tiene el país con mayor GDP del 2020?

El GDP (Gross Domestic Product) o PIB (Producto Interior Bruto) Mide el valor de la producción de bienes y servicios de un país.

En este proceso añadí después de un filtrado por año, un ranking de felicidad con respecto al indicador “Life Lider” y ordenamos de mayor a menor por el indicador “Log GDP per capita”.

El país con mayor valor en el “Log GDP per capita (PIB por habitante)” fue en el año 2020, Irlanda, sin embargo su ranking ese año como países más felices fue el puesto número 13.

5. ¿En que porcentaje ha variado a nivel mundial el GDP promedio del 2020 respecto al 2021 y determinar si aumentó o disminuyó?

Podemos ver analizando este dato, que el año 2021 hubo una disminución del 3.27% con respecto al año anterior 2020.

Tenemos que tener en cuenta aquí el factor pandemia del COVID, las crisis económicas, sanitarias, de materiales que hubo entre esos dos años y que por tanto afectó a todos los países del mundo.

6. ¿Cuál es el país con mayor expectativa de vida y qué valor tenía en el año 2019?

En este caso también incorporé el valor del año 2021 al data frame del resto de años con el país y el indicador “Healthy life expctancy”.

El país con mayor esperanza de vida es Singapur, valor que logró en el año 2019, con 77.1 años de esperanza de vida.

Una vez explicado los “pros and cons” de Apache Spark con Scala y PySpark es el momento de ver una comparativa entre entornos de trabajo:

DataBricks:

* Proporciona un entorno colaborativo en la nube, es una plataforma diseñada para la colaboración en equipos. Facilita la integración con Spark y con otros servicios en la nube, ya que está diseñado específicamente para integrarse de manera nativa con Apache Spark.

* Facilita el desarrollo y la ejecución de tareas distribuidas.

* Proporciona herramientas integradas para gestionar todo el ciclo de vida del desarrollo (escritura de código, implementación y monitoreo), todo ello en una experiencia única y sencilla.

* La administración eficiente de clústeres y recursos permite su escalabilidad de forma automática según las necesidades.

* En tema de seguridad cumple con los estándares y puede integrarse con servicios de autentificación, proporciona características avanzadas de seguridad y control de acceso.

* Es un servicio que implica costos asociados a su uso

Jupyter Notebook:

* Aplicación web de código abierto que contiene código en vivo, ecuaciones, visualizaciones y texto narrativo. Puede ejecutarse en entornos locales sin costo.

* Para colaborar se necesitan herramientas externas, igual que para gestionar el ciclo de vida y la implementación.

* Requiere configuración adicional para trabajar con PySpark.

* La escalabilidad depende de la infraestructura y puede requerir configuración manual.

* La seguridad depende del servidor.

Reflexiones Finales:

A través de este proyecto, he aprendido que trabajar con Scala y PySpark es desafiante pero gratificante. No es necesario elegir entre papá y mamá; ambos lenguajes tienen su lugar según las necesidades del proyecto y el nivel de comodidad del equipo. “DataBricks” se destaca por su integración con Spark, pero Jupyter Notebook sigue siendo una opción válida, especialmente por su flexibilidad y menor complejidad en algunos aspectos.

Este viaje de aprendizaje me ha dejado claro que la tecnología está en constante evolución, y la capacidad de adaptación y la disposición para afrontar desafíos son habilidades esenciales en el mundo del Big Data.

Pueden encontrar el proyecto completo en mi repositorio en GitHub:

https://github.com/elsdragon/BigDataProcessing

Recuerda, enfrentarte a nuevos retos te permite descubrir tu verdadero potencial. Así que, ¡no te conformes con lo que ya sabes y atrévete a explorar lo desconocido!

Lucía Domínguez Bermejo

--

--