Modificare le colonne di un DataFrame
In precedenza hai filtrato le righe che non assomigliavano a un nome. Ora, basandosi sul tuo lavoro precedente, la tua responsabile ti chiede di creare due nuove colonne: first_name e last_name. Ti chiede di dividere la colonna VOTER_NAME in parole usando qualsiasi carattere di spazio. Considererai l’ultima parola come last_name, e tutte le altre parole come first_name. In questo esercizio userai alcune funzioni nuove, tra cui .split(), .size() e .getItem(). Il metodo .getItem(index) accetta un intero e restituisce l’elemento corrispondente nella colonna. Le funzioni .split() e .size() si trovano nella libreria pyspark.sql.functions.
Tieni presente che queste operazioni sono sempre un po’ specifiche del caso d’uso. Far sì che i tuoi dati rispettino un formato spesso conta più dei dettagli precisi del formato. Raramente un’attività di pulizia dei dati è pensata per una sola persona: adeguarsi a un formato definito rende più semplice condividere i dati in seguito (ad esempio, Paolo non deve preoccuparsi dei nomi: Maria ha già pulito l’insieme di dati).
Il DataFrame di elettori filtrato dal tuo esercizio precedente è disponibile come voter_df. La libreria pyspark.sql.functions è disponibile con l’alias F.
Questo esercizio fa parte del corso
Pulizia dei dati con PySpark
Istruzioni dell'esercizio
- Aggiungi una nuova colonna chiamata
splitsche contenga l’elenco dei possibili nomi. - Usa il metodo
getItem()e crea una nuova colonna chiamatafirst_name. - Prendi l’ultimo elemento della lista
splitse crea una colonna chiamatalast_name. - Elimina la colonna
splitse mostra il nuovovoter_df.
esercizio interattivo pratico
Prova questo esercizio completando questo codice di esempio.
# 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()