Ändra kolumner i en DataFrame
I föregående övning filtrerade du bort rader som inte hade ett format som liknade ett namn. Nu ber din chef dig att skapa två nya kolumner – first_name och last_name – baserat på ditt tidigare arbete. Du ska dela upp kolumnen VOTER_NAME vid varje mellanslag. Det sista ordet behandlas som last_name, och alla övriga ord som first_name. I den här övningen använder du några nya funktioner: .split(), .size() och .getItem(). Metoden .getItem(index) tar ett heltalsvärde och returnerar det element i kolumnen som har det angivna indexet. Funktionerna .split() och .size() finns i biblioteket pyspark.sql.functions.
Observera att den här typen av operationer alltid är mer eller mindre specifika för det aktuella användningsfallet. Att data följer ett visst format är ofta viktigare än exakt vilket format det är. Datarensning är sällan avsedd för bara en person – ett enhetligt format gör det enklare att dela data senare (det vill säga, Paul behöver inte bekymra sig om namnformateringen, eftersom Mary redan har rensat datamängden).
Den filtrerade voter-DataFrame från föregående övning finns tillgänglig som voter_df. Biblioteket pyspark.sql.functions är tillgängligt under aliaset F.
Den här övningen är en del av kursen
Datarensning med PySpark
Övningsinstruktioner
- Lägg till en ny kolumn kallad
splitssom innehåller listan med möjliga namn. - Använd metoden
getItem()och skapa en ny kolumn kalladfirst_name. - Hämta det sista elementet i listan
splitsoch skapa en kolumn kalladlast_name. - Ta bort kolumnen
splitsoch visa den uppdateradevoter_df.
Interaktiv övning med praktiskt arbete
Testa den här övningen genom att slutföra den här exempelkoden.
# 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()