Sélection II
À l'instar de SQL, vous pouvez également utiliser la méthode .select() pour effectuer des opérations sur les colonnes. Lorsque vous sélectionnez une colonne à l'aide de la notation df.colName, vous pouvez effectuer n'importe quelle opération sur la colonne et la méthode .select() renverra la colonne transformée. Par exemple,
flights.select(flights.air_time/60)
renvoie une colonne indiquant la durée des vols en heures plutôt qu'en minutes. Vous pouvez également utiliser la méthode .alias() pour renommer une colonne que vous sélectionnez. Si vous souhaitez utiliser .select() pour la colonne duration_hrs (qui ne figure pas dans votre DataFrame), vous pouvez procéder comme suit :
flights.select((flights.air_time/60).alias("duration_hrs"))
La méthode équivalente Spark DataFrame, .selectExpr(), accepte les expressions SQL sous forme de chaîne :
flights.selectExpr("air_time/60 as duration_hrs")
avec le mot-clé SQL as étant équivalent à la méthode .alias(). Pour sélectionner plusieurs colonnes, vous pouvez transmettre plusieurs chaînes.
Veuillez noter qu'un SparkSession nommé spark se trouve déjà dans votre espace de travail, ainsi que le Spark DataFrame flights.
Cet exercice fait partie du cours
<cours>Principes fondamentaux de PySpark</cours>Instructions de l’exercice
Créez une table indiquant la vitesse moyenne de chaque vol dans les deux sens.
- Calculez la vitesse moyenne en divisant
distanceparair_time(convertie en heures). Veuillez utiliser la méthode.alias()et nommer cette colonne"avg_speed". Veuillez enregistrer la sortie sous la variableavg_speed. - Veuillez sélectionner les colonnes
"origin", "dest", "tailnum"etavg_speed(sans les guillemets). Enregistrez cela sousspeed1. - Veuillez créer la même table en utilisant
.selectExpr()et une chaîne contenant une expression SQL. Enregistrez cela sousspeed2.
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 ____")