Urval II
Precis som i SQL kan du använda metoden .select() för att utföra kolumnvisa operationer. När du väljer en kolumn med notationen df.colName kan du utföra valfri kolumnoperation – .select() returnerar då den transformerade kolumnen. Till exempel returnerar
flights.select(flights.air_time/60)
en kolumn med flygtider i timmar i stället för minuter. Du kan också använda metoden .alias() för att byta namn på en kolumn du väljer. Om du till exempel vill använda .select() för att hämta kolumnen duration_hrs (som inte finns i din DataFrame) kan du skriva
flights.select((flights.air_time/60).alias("duration_hrs"))
Motsvarande Spark DataFrame-metod, .selectExpr(), tar emot SQL-uttryck som en sträng:
flights.selectExpr("air_time/60 as duration_hrs")
där SQL-nyckelordet as motsvarar metoden .alias(). För att välja flera kolumner skickar du in flera strängar.
Kom ihåg att en SparkSession med namnet spark redan finns i din miljö, tillsammans med Spark DataFrame:en flights.
Den här övningen är en del av kursen
Grunderna i PySpark
Övningsinstruktioner
Skapa en tabell med medelhastigheten för varje flyg, beräknad på två sätt.
- Beräkna medelhastigheten genom att dividera
distancemedair_time(omräknat till timmar). Använd metoden.alias()för att namnge kolumnen"avg_speed". Spara resultatet i variabelnavg_speed. - Välj kolumnerna
"origin","dest","tailnum"ochavg_speed(utan citattecken!). Spara detta somspeed1. - Skapa samma tabell med hjälp av
.selectExpr()och en sträng med ett SQL-uttryck. Spara detta somspeed2.
Interaktiv övning med praktiskt arbete
Testa den här övningen genom att slutföra den här exempelkoden.
# 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 ____")