Kolommen maken
In dit hoofdstuk leer je hoe je de methoden van Sparks DataFrame-klasse gebruikt om veelvoorkomende bewerkingen op gegevens uit te voeren.
Laten we kolomgewijze bewerkingen bekijken. In Spark kun je dit doen met de methode .withColumn(), die twee argumenten verwacht. Eerst een string met de naam van je nieuwe kolom, en daarna de nieuwe kolom zelf.
De nieuwe kolom moet een object van de klasse Column zijn. Zo’n object maken is net zo eenvoudig als een kolom uit je DataFrame halen met df.colName.
Een Spark DataFrame bijwerken werkt anders dan in pandas, omdat een Spark DataFrame immutable is. Dat betekent dat het niet kan worden aangepast, en dat kolommen dus niet ter plekke kunnen worden overschreven.
Daarom geven al deze methoden een nieuw DataFrame terug. Als je het originele DataFrame wilt overschrijven, moet je het geretourneerde DataFrame opnieuw toekennen met de methode, zoals hieronder:
df = df.withColumn("newCol", df.oldCol + 1)
De bovenstaande code maakt een DataFrame met dezelfde kolommen als df plus een nieuwe kolom, newCol, waarbij elke waarde gelijk is aan de overeenkomstige waarde uit oldCol, plus één.
Om een bestaande kolom te overschrijven, geef je gewoon de naam van die kolom door als het eerste argument!
Onthoud: er staat al een SparkSession met de naam spark voor je klaar in je werkruimte.
Deze oefening maakt deel uit van de cursus
Basis van PySpark
Oefeninstructies
- Gebruik de methode
spark.table()met het argument"flights"om een DataFrame te maken met de waarden uit de tabelflightsin de.catalog. Sla dit op alsflights. - Toon het begin van
flightsmetflights.show(). Controleer de output: de kolomair_timebevat de duur van de vlucht in minuten. - Werk
flightsbij met een nieuwe kolomduration_hrs, die de duur van elke vlucht in uren bevat (je moetair_timedelen door het aantal minuten in een uur).
Praktische interactieve oefening
Probeer deze oefening eens door deze voorbeeldcode in te vullen.
# Create the DataFrame flights
flights = spark.table(____)
# Show the head
____.____()
# Add duration_hrs
flights = flights.withColumn(____)