Modification des colonnes du DataFrame
Auparavant, vous filtraient toutes les lignes qui ne correspondaient pas à quelque chose qui ressemblait à un nom. Sur la base de vos travaux antérieurs, votre responsable vous a demandé de créer deux nouvelles colonnes - first_name
et last_name
. Elle vous demande de diviser la colonne VOTER_NAME
en mots sur n'importe quel caractère d'espace. Vous traiterez le dernier mot comme le last_name
, et tous les autres mots comme le first_name
. Vous utiliserez de nouvelles fonctions dans cet exercice, notamment .split()
, .size()
et .getItem()
. Le site .getItem(index)
prend une valeur entière pour renvoyer l'élément de la colonne qui porte le numéro approprié. 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'utilisation. La conformité de vos données à un format est souvent plus importante que les détails spécifiques du format. Il est rare qu'une tâche de nettoyage de données ne soit destinée qu'à une seule personne - la correspondance avec un format défini facilite le partage ultérieur des données (par exemple, Paul n'a pas besoin de se préoccuper des noms - Marie a déjà nettoyé l'ensemble de données).
Le DataFrame de votants filtré de votre exercice précédent est disponible à l'adresse 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
splits
contenant 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
splits
et créez une colonne appeléelast_name
. - Supprimez la colonne
splits
et 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()