Sélections II
Comme en SQL, vous pouvez aussi utiliser la méthode .select() pour effectuer des opérations colonne par colonne. Lorsque vous sélectionnez une colonne avec la notation df.colName, vous pouvez appliquer n'importe quelle opération sur la colonne et la méthode .select() retournera la colonne transformée. Par exemple,
flights.select(flights.air_time/60)
retourne une colonne donnant la durée des vols en heures plutôt qu'en minutes. Vous pouvez aussi utiliser la méthode .alias() pour renommer une colonne que vous sélectionnez. Ainsi, si vous voulez .select() la colonne duration_hrs (qui n'est pas dans votre DataFrame), vous pouvez faire
flights.select((flights.air_time/60).alias("duration_hrs"))
La méthode équivalente des DataFrames Spark, .selectExpr(), accepte des expressions SQL sous forme de chaîne :
flights.selectExpr("air_time/60 as duration_hrs")
où le mot-clé SQL as est équivalent à la méthode .alias(). Pour sélectionner plusieurs colonnes, vous pouvez passer plusieurs chaînes.
N'oubliez pas qu'un SparkSession appelé spark est déjà présent dans votre espace de travail, ainsi que le DataFrame Spark flights.
Cette activité fait partie du cours
Fondements de PySpark
Instructions de l’exercice
Créez un tableau de la vitesse moyenne de chaque vol, de deux façons.
- Calculez la vitesse moyenne en divisant
distanceparair_time(converti en heures). Utilisez la méthode.alias()pour nommer cette colonne"avg_speed". Enregistrez le résultat dans la variableavg_speed. - Sélectionnez les colonnes
"origin", "dest", "tailnum"etavg_speed(sans guillemets !). Enregistrez ceci dansspeed1. - Créez le même tableau en utilisant
.selectExpr()et une chaîne contenant une expression SQL. Enregistrez ceci dansspeed2.
Exercice interactif pratique
Essayez cet exercice en complétant ce code d’exemple.
# Define avg_speed
avg_speed = (flights.____/(flights.____/60)).alias("____")
# Select the correct columns
speed1 = flights.select("origin", "dest", "tailnum", avg_speed)
# Create the same table using a SQL expression
speed2 = flights.selectExpr("____", "____", "____", "distance/(air_time/60) as ____")