IniziaInizia gratis

Selezionare II

Come in SQL, puoi usare anche il metodo .select() per eseguire operazioni a livello di colonna. Quando selezioni una colonna con la notazione df.colName, puoi applicare qualsiasi operazione di colonna e il metodo .select() restituirà la colonna trasformata. Per esempio,

flights.select(flights.air_time/60)

restituisce una colonna con le durate dei voli in ore invece che in minuti. Puoi anche usare il metodo .alias() per rinominare una colonna che stai selezionando. Quindi, se volessi .select() la colonna duration_hrs (che non è nel tuo DataFrame) potresti fare

flights.select((flights.air_time/60).alias("duration_hrs"))

Il metodo equivalente dei DataFrame Spark, .selectExpr(), accetta espressioni SQL come stringa:

flights.selectExpr("air_time/60 as duration_hrs")

con la parola chiave SQL as equivalente al metodo .alias(). Per selezionare più colonne, puoi passare più stringhe.

Ricorda: una SparkSession chiamata spark è già nel tuo workspace, insieme al DataFrame Spark flights.

Questo esercizio fa parte del corso

Fondamenti di PySpark

Visualizza il corso

Istruzioni dell'esercizio

Crea una tabella con la velocità media di ogni volo in entrambi i modi.

  • Calcola la velocità media dividendo distance per air_time (convertito in ore). Usa il metodo .alias() per chiamare questa colonna "avg_speed". Salva l'output nella variabile avg_speed.
  • Seleziona le colonne "origin", "dest", "tailnum" e avg_speed (senza virgolette!). Salva il risultato come speed1.
  • Crea la stessa tabella usando .selectExpr() e una stringa contenente un'espressione SQL. Salva il risultato come speed2.

Esercizio pratico interattivo

Prova a risolvere questo esercizio completando il codice di esempio.

# 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 ____")
Modifica ed esegui il codice