Filtrado y Join de Datos Olímpicos en Pandas

Clase 17 de 25Curso de Fundamentos de Spark para Big Data

Contenido del curso

Data Frames y SQL

Resumen

Cruzar múltiples dataframes mediante joins y aplicar filtros es una de las operaciones más frecuentes cuando trabajas con PySpark. En esta práctica se resuelve un reto que combina datos de resultados olímpicos, deportistas y países para obtener únicamente las medallas de oro, plata y bronce junto con la información del equipo ganador.

¿Cómo filtrar valores no deseados antes de un join?

El primer paso consiste en limpiar el dataframe de resultados eliminando todas las filas cuya columna de medalla contenga valores nulos o no correspondan a oro, plata o bronce [0:12]. Esto se logra excluyendo los valores NA de la columna medalla, lo que reduce el volumen de datos antes de realizar cualquier cruce.

Esta técnica es una buena práctica porque:

  • Reduce el costo computacional del join posterior.
  • Garantiza que solo trabajas con registros relevantes.
  • Evita arrastrar filas innecesarias a lo largo de toda la transformación.

¿Cómo encadenar múltiples joins en PySpark?

Una vez filtrado el dataframe de resultados, se realizan dos left joins consecutivos [0:30]:

Primer join: resultados con deportistas

Se cruza resultado_dataframe con deportista_olimpico_dataframe utilizando la columna deportista_id como llave de unión. Ambos dataframes comparten esta columna, por lo que la comparación es directa. Se indica explícitamente que el tipo de join es left, lo cual asegura que se conserven todos los registros del dataframe izquierdo.

Segundo join: deportistas con países

El resultado del primer cruce se une con paises_dataframe comparando la columna id de países contra equipo_id de deportista olímpico [0:52]. De nuevo se emplea un left join para mantener la integridad de los datos del lado izquierdo.

Selección final de columnas

Después de los cruces, se aplica un .select() para conservar únicamente las columnas que interesan: medalla, equipo y sigla [1:06]. Esta selección limpia el dataframe resultante y lo deja listo para análisis.

¿Cómo ordenar resultados con sort en PySpark?

Como paso adicional, se muestra el uso de .sort() sobre la columna sigla [1:12]. Dentro de este método puedes indicar si el ordenamiento será ascendente o descendente pasando el parámetro correspondiente. Esto funciona de forma análoga al ORDER BY que ya conoces de SQL.

Algunos puntos importantes a considerar al escribir joins encadenados:

  • Los joins deben escribirse en una sola línea o con el formato adecuado para evitar errores de sintaxis [1:42].
  • No deben existir espacios adicionales después de ciertas expresiones, ya que PySpark puede interpretarlos como errores [1:55].
  • Verificar la salida después de cada transformación ayuda a detectar problemas rápidamente.

El resultado final muestra un dataframe limpio con las medallas, los equipos ganadores y sus siglas ordenadas. Si obtuviste una salida similar, el reto fue resuelto correctamente. Comparte tus dudas o tu propia solución en la sección de comentarios.