Selecteren II
Net als in SQL kun je met de methode .select() ook kolomgewijze bewerkingen uitvoeren. Wanneer je een kolom selecteert met de notatie df.colName, kun je elke kolombewerking uitvoeren en geeft de methode .select() de getransformeerde kolom terug. Bijvoorbeeld,
flights.select(flights.air_time/60)
geeft een kolom met vluchtduur in uren in plaats van minuten. Je kunt ook de methode .alias() gebruiken om een kolom die je selecteert te hernoemen. Als je dus de kolom duration_hrs wilt .select()-en (die niet in je DataFrame zit), kun je dit doen
flights.select((flights.air_time/60).alias("duration_hrs"))
De equivalente Spark DataFrame-methode .selectExpr() neemt SQL-expressies als string:
flights.selectExpr("air_time/60 as duration_hrs")
waarbij het SQL-sleutelwoord as overeenkomt met de methode .alias(). Om meerdere kolommen te selecteren, kun je meerdere strings doorgeven.
Onthoud: er is al een SparkSession genaamd spark in je workspace aanwezig, samen met de Spark DataFrame flights.
Deze oefening maakt deel uit van de cursus
Basis van PySpark
Oefeninstructies
Maak een tabel met de gemiddelde snelheid van elke vlucht op beide manieren.
- Bereken de gemiddelde snelheid door
distancete delen doorair_time(omgezet naar uren). Gebruik de methode.alias()om deze kolom"avg_speed"te noemen. Sla de uitvoer op in de variabeleavg_speed. - Selecteer de kolommen
"origin", "dest", "tailnum"enavg_speed(zonder aanhalingstekens!). Sla dit op alsspeed1. - Maak dezelfde tabel met
.selectExpr()en een string met een SQL-expressie. Sla dit op alsspeed2.
Praktische interactieve oefening
Probeer deze oefening eens door deze voorbeeldcode in te vullen.
# 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 ____")