Aan de slagGa gratis aan de slag

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

Cursus bekijken

Oefeninstructies

Maak een tabel met de gemiddelde snelheid van elke vlucht op beide manieren.

  • Bereken de gemiddelde snelheid door distance te delen door air_time (omgezet naar uren). Gebruik de methode .alias() om deze kolom "avg_speed" te noemen. Sla de uitvoer op in de variabele avg_speed.
  • Selecteer de kolommen "origin", "dest", "tailnum" en avg_speed (zonder aanhalingstekens!). Sla dit op als speed1.
  • Maak dezelfde tabel met .selectExpr() en een string met een SQL-expressie. Sla dit op als speed2.

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 ____")
Code bewerken en uitvoeren