CommencezCommencez gratuitement

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

Voir le cours

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 distance par air_time (converti en heures). Utilisez la méthode .alias() pour nommer cette colonne "avg_speed". Enregistrez le résultat dans la variable avg_speed.
  • Sélectionnez les colonnes "origin", "dest", "tailnum" et avg_speed (sans guillemets !). Enregistrez ceci dans speed1.
  • Créez le même tableau en utilisant .selectExpr() et une chaîne contenant une expression SQL. Enregistrez ceci dans speed2.

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 ____")
Modifier et exécuter le code