DataFrame-kolommen aanpassen
Eerder heb je alle rijen gefilterd die niet leken op een naam. Op basis van dat werk heeft je manager je nu gevraagd om twee nieuwe kolommen te maken: first_name en last_name. Ze vraagt je om de kolom VOTER_NAME op te splitsen in woorden op elk spatie-teken. Je beschouwt het laatste woord als de last_name en alle andere woorden samen als de first_name. In deze oefening gebruik je een paar nieuwe functies: .split(), .size() en .getItem(). De methode .getItem(index) neemt een geheel getal en geeft het overeenkomstig genummerde item in de kolom terug. De functies .split() en .size() staan in de bibliotheek pyspark.sql.functions.
Let op: dit soort bewerkingen zijn altijd enigszins afhankelijk van het gebruiksscenario. Het is vaak belangrijker dat je gegevens aan een formaat voldoen dan de exacte details van dat formaat. Zelden is een opschoningsklus voor één persoon bedoeld: als je een gedefinieerd formaat aanhoudt, kun je de gegevens later makkelijker delen (bijv. Paul hoeft zich niet druk te maken om namen — Mary heeft de gegevensset al opgeschoond).
De gefilterde DataFrame met kiezers uit de vorige oefening is beschikbaar als voter_df. De bibliotheek pyspark.sql.functions is beschikbaar onder de alias F.
Deze oefening maakt deel uit van de cursus
Data opschonen met PySpark
Oefeninstructies
- Voeg een nieuwe kolom
splitstoe met de lijst van mogelijke namen. - Gebruik de methode
getItem()en maak een nieuwe kolomfirst_name. - Pak het laatste element van de
splits-lijst en maak een kolomlast_name. - Drop de kolom
splitsen laat de nieuwevoter_dfzien.
Praktische interactieve oefening
Probeer deze oefening eens door deze voorbeeldcode in te vullen.
# Add a new column called splits separated on whitespace
voter_df = voter_df.withColumn(____, F.____(voter_df.VOTER_NAME, '\s+'))
# Create a new column called first_name based on the first item in splits
voter_df = voter_df.withColumn(____, voter_df.splits.getItem(____)
# Get the last entry of the splits list and create a column called last_name
voter_df = voter_df.withColumn(____, voter_df.splits.getItem(F.____('splits') - ____))
# Drop the splits column
voter_df = voter_df.____('splits')
# Show the voter_df DataFrame
voter_df.show()