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
Istruzioni dell'esercizio
Crea una tabella con la velocità media di ogni volo in entrambi i modi.
- Calcola la velocità media dividendo
distanceperair_time(convertito in ore). Usa il metodo.alias()per chiamare questa colonna"avg_speed". Salva l'output nella variabileavg_speed. - Seleziona le colonne
"origin", "dest", "tailnum"eavg_speed(senza virgolette!). Salva il risultato comespeed1. - Crea la stessa tabella usando
.selectExpr()e una stringa contenente un'espressione SQL. Salva il risultato comespeed2.
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 ____")