Joins y Selección de Datos en DataFrames con PySpark
Clase 16 de 25 • Curso 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!