Modifier des colonnes de DataFrame
Plus tôt, vous avez filtré toutes les lignes qui ne ressemblaient pas vraiment à un nom. À partir de ce travail, votre gestionnaire vous demande maintenant de créer deux nouvelles colonnes : first_name et last_name. Elle vous demande de scinder la colonne VOTER_NAME en mots selon tout caractère d'espace. Vous traiterez le dernier mot comme last_name, et tous les autres mots comme first_name. Vous utiliserez de nouvelles fonctions dans cet exercice, notamment .split(), .size() et .getItem(). La méthode .getItem(index) prend une valeur entière pour renvoyer l'élément correspondant dans la colonne. Les fonctions .split() et .size() se trouvent dans la bibliothèque pyspark.sql.functions.
Veuillez noter que ces opérations sont toujours un peu propres au cas d'usage. Amener vos données à respecter un format compte souvent plus que les détails précis du format. Il est rare qu'une tâche de nettoyage de données ne serve qu'à une seule personne : respecter un format défini facilite le partage des données par la suite (p. ex., Paul n'a pas à se soucier des noms — Mary a déjà nettoyé l'ensemble de données).
Le DataFrame d'électeurs filtré de l'exercice précédent est accessible sous le nom voter_df. La bibliothèque pyspark.sql.functions est importée sous l'alias F.
Cette activité fait partie du cours
Nettoyer des données avec PySpark
Instructions de l’exercice
- Ajoutez une nouvelle colonne appelée
splitscontenant la liste des noms possibles. - Utilisez la méthode
getItem()et créez une nouvelle colonne appeléefirst_name. - Récupérez la dernière entrée de la liste
splitset créez une colonne appeléelast_name. - Supprimez la colonne
splitset affichez le nouveauvoter_df.
Exercice interactif pratique
Essayez cet exercice en complétant ce code d’exemple.
# 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()