Modyfikowanie kolumn DataFrame
W poprzednim ćwiczeniu odfiltrowałeś wiersze, które nie przypominały prawidłowych imion i nazwisk. Teraz, bazując na tej pracy, menedżerka poprosiła cię o utworzenie dwóch nowych kolumn – first_name i last_name. Zadanie polega na podzieleniu kolumny VOTER_NAME na słowa według znaków spacji. Ostatnie słowo potraktuj jako last_name, a wszystkie pozostałe – jako first_name. W tym ćwiczeniu skorzystasz z nowych funkcji: .split(), .size() oraz .getItem(). Metoda .getItem(index) przyjmuje wartość całkowitą i zwraca element listy o podanym indeksie. Funkcje .split() i .size() pochodzą z biblioteki pyspark.sql.functions.
Pamiętaj, że tego rodzaju operacje są zawsze dostosowane do konkretnego przypadku użycia. Ważniejsze niż szczegóły formatu jest to, żeby dane były spójne i zgodne z przyjętym schematem. Czyszczenie danych rzadko wykonuje się dla jednej osoby – ujednolicony format ułatwia późniejsze udostępnianie zbioru (np. Paweł nie musi już martwić się o imiona i nazwiska, bo Maria już zadbała o ich poprawność).
Przefiltrowany DataFrame voter_df z poprzedniego ćwiczenia jest dostępny pod tą samą nazwą. Biblioteka pyspark.sql.functions jest dostępna pod aliasem F.
To ćwiczenie jest częścią kursu
Czyszczenie danych w PySpark
Instrukcje do ćwiczenia
- Dodaj nową kolumnę o nazwie
splits, która będzie przechowywać listę możliwych członów nazwy. - Użyj metody
getItem()i utwórz nową kolumnę o nazwiefirst_name. - Pobierz ostatni element listy
splitsi utwórz kolumnę o nazwielast_name. - Usuń kolumnę
splitsi wyświetl zaktualizowany DataFramevoter_df.
Interaktywne ćwiczenie praktyczne
Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.
# 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()