Joins y Selección de Datos en DataFrames con PySpark

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

Resumen

¿Cómo interactuar con múltiples DataFrames en PySpark?

Trabajar con múltiples DataFrames es una habilidad fundamental para manejar y analizar datos de manera efectiva en cualquier proyecto de análisis de datos. En este contexto, utilizaremos PySpark para interactuar con distintos DataFrames mediante operaciones de join. Esta práctica es esencial para unir diferentes conjuntos de datos y encontrar información valiosa de manera eficiente.

Para ilustrar este proceso, utilizaremos varios DataFrames como ejemplos, entre ellos, deportista_olímpico, resultado, y juego.

¿Qué es un Join en PySpark?

En PySpark, un join o unión es una operación que nos permite combinar columnas de dos DataFrames con base en una relación entre sus columnas. Existen varios tipos de uniones, tales como:

  • Inner join: Devuelve registros que tienen valores coincidentes en ambas tablas.
  • Left join: Devuelve todos los registros de la tabla izquierda y los registros coincidentes de la tabla derecha.
  • Right join: Devuelve todos los registros de la tabla derecha y los registros coincidentes de la tabla izquierda.
  • Full outer join: Devuelve registros cuando hay una coincidencia en la tabla izquierda o derecha.

¿Cómo realizar un Left Join con PySpark?

A continuación, te mostramos cómo realizar un left join usando PySpark. Iniciaremos el proceso utilizando el DataFrame deportista_olímpico:

# Ejemplo de Left Join en PySpark
from pyspark.sql.functions import col

# Join entre 'deportista_olímpico' y 'resultado'
joined_df = deportista_olímpico.join(
    resultado,
    deportista_olímpico.deportistaID == resultado.deportistaID,
    'left'
)

# Join entre 'joined_df' y 'juego'
joined_df = joined_df.join(
    juego,
    joined_df.resultadoID == juego.juegoID,
    'left'
)

# Join entre 'joined_df' y 'deportes_olímpicos'
joined_df = joined_df.join(
    deportes_olímpicos,
    joined_df.resultado_eventoID == deportes_olímpicos.eventoID,
    'left'
)

¿Cómo seleccionar las columnas deseadas?

Después de realizar las uniones, es crucial seleccionar las columnas relevantes para tu análisis. A continuación, te mostramos cómo hacerlo aplicando alias para mejorar la legibilidad:

# Selección de columnas con alias para una mejor interpretación
final_df = joined_df.select(
    deportista_olímpico.nombre.alias('Nombre del Jugador'),
    deportista_olímpico.edad.alias('Edad al Jugar'),
    resultado.medalla,
    juego.año.alias('Año de Juego'),
    deportes_olímpicos.nombre.alias('Nombre de Disciplina')
)

# Mostrar el resultado
final_df.show()

¿Cómo resolver problemas de ambigüedad?

En operaciones con múltiples DataFrames, es común enfrentar problemas de ambigüedad debido a columnas con nombres idénticos. Para evitar esto, es recomendable usar alias claros que identifiquen la procedencia de cada columna y hacer explícitas las referencias a las tablas:

# Resolviendo ambigüedad al hacer explícita la referencia a las tablas
final_df = joined_df.select(
    deportista_olímpico.nombre.alias('Nombre del Jugador'),
    deportista_olímpico.edad.alias('Edad al Jugar'),
    resultado.medalla,
    juego.año.alias('Año de Juego'),
    deportes_olímpicos.nombre.alias('Nombre de Disciplina')
)

# Mostrar el resultado de manera clara
final_df.show()

Reto práctico

Para consolidar lo aprendido, te proponemos un reto: intenta realizar un join que combine todas las medallas ganadoras junto con el país y el equipo al que pertenecen. Recuerda enfocarte solo en las medallas ganadoras y ten cuidado para evitar duplicados o ambigüedades.

A medida que avanzas en tu aprendizaje, estas prácticas te ayudarán a generar análisis robustos y eficientes. ¡Continúa explorando la fascinante cantidad de posibilidades que la ciencia de datos tiene para ofrecerte!