Modifier des colonnes de DataFrame
Précédemment, vous avez filtré les lignes qui ne correspondaient pas à quelque chose ressemblant globalement à un nom. À présent, sur la base de votre travail antérieur, votre responsable vous demande de créer deux nouvelles colonnes : first_name et last_name. Elle vous demande de découper la colonne VOTER_NAME en mots sur n’importe quel caractère d’espace. Vous considérerez 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 et renvoie 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 quelque peu spécifiques au cas d’usage. Faire en sorte que vos données respectent un format compte souvent plus que les détails précis de ce format. Il est rare qu’une tâche de nettoyage de données soit destinée à une seule personne : respecter un format défini permet de partager les données plus facilement par la suite (par exemple, Paul n’a pas à se soucier des noms : Mary a déjà nettoyé l’ensemble de données).
Le DataFrame des électeurs filtré de l’exercice précédent est disponible sous le nom voter_df. La bibliothèque pyspark.sql.functions est disponible sous l’alias F.
Cet exercice fait partie du cours
Nettoyer des données avec PySpark
Instructions
- 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 cet exemple de code.
# 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()