Démarrage : améliorer et nettoyer des données
Cet article de démarrage vous guide tout au long du processus d’utilisation d’un notebook Azure Databricks pour nettoyer et améliorer les données de noms de nouveaux-nés de l’état de New York, précédemment chargées dans une table d’Unity Catalog, en utilisant Python, Scala et R. Dans cet article, vous modifiez les noms de colonnes, changez l’utilisation des majuscules et épelez le sexe de chaque nouveau-né à partir de la table de données brutes, puis vous enregistrez le DataFrame dans une table Silver. Vous filtrez ensuite les données pour inclure uniquement les données de 2021, regroupez les données au niveau de l’état, puis triez les données par nombre. Enfin, vous enregistrez ce DataFrame dans une table Gold et visualisez les données dans un graphique à barres. Si vous souhaitez découvrir plus d’informations sur les tables Silver et Gold, consultez Architecture de médaillon.
Important
Cet article de démarrage s’appuie sur Démarrage : ingérer et insérer des données supplémentaires. Vous devez terminer les étapes de cet article pour l’achever. Pour découvrir un notebook complet pour cet article de démarrage, voir Ingérer d’autres notebooks de données.
Spécifications
Pour effectuer les tâches décrites dans cet article, vous devez répondre aux exigences suivantes :
- Unity Catalog doit être activé pour votre espace de travail. Pour bien démarrer avec Unity Catalog, consultez Configurer et gérer Unity Catalog.
- L’utilisateur doit disposer du privilège
WRITE VOLUME
sur un volume, du privilègeUSE SCHEMA
sur le schéma parent, et du privilègeUSE CATALOG
sur le catalogue parent. - Vous devez avoir l’autorisation d’utiliser une ressource de calcul existante ou d’en créer une. Consultez Démarrage : configuration d’un compte et d’un espace de travail ou contactez votre administrateur Databricks.
Conseil
Pour découvrir un notebook terminé pour cet article, voir Nettoyer et améliorer des notebooks de données.
Étape 1 : créer un notebook
Pour créer un notebook dans votre espace de travail, cliquez sur Nouveau dans la barre latérale, puis sur Notebook. Un notebook vide s’ouvre dans l’espace de travail.
Pour en savoir plus sur la création et la gestion des notebooks, consultez Gérer les notebooks.
Étape 2 : Définir des variables
Dans cette étape, vous définissez des variables à utiliser dans l’exemple de notebook que vous créez dans cet article.
Copiez et collez le code suivant dans la nouvelle cellule de notebook vide. Remplacez
<catalog-name>
,<schema-name>
et<volume-name>
par les noms de catalogue, de schéma et de volume d’un volume Unity Catalog. Remplacez éventuellement la valeurtable_name
par le nom de table de votre choix. Plus loin dans cet article, vous allez charger les données des noms de nouveaux-nés dans cette table.Appuyez sur
Shift+Enter
pour exécuter la cellule et créer une cellule vide.Python
catalog = "<catalog_name>" schema = "<schema_name>" table_name = "baby_names" silver_table_name = "baby_names_prepared" gold_table_name = "top_baby_names_2021" path_table = catalog + "." + schema print(path_table) # Show the complete path
Scala
val catalog = "<catalog_name>" val schema = "<schema_name>" val tableName = "baby_names" val silverTableName = "baby_names_prepared" val goldTableName = "top_baby_names_2021" val pathTable = s"${catalog}.${schema}" print(pathTable) // Show the complete path
R
catalog <- "<catalog_name>" schema <- "<schema_name>" volume <- "<volume_name>" table_name <- "baby_names" silver_table_name <- "baby_names_prepared" gold_table_name <- "top_baby_names_2021" path_table <- paste(catalog, ".", schema, sep = "") print(path_table) # Show the complete path
Étape 3 : charger les données brutes dans un nouveau DataFrame
Cette étape charge les données brutes précédemment enregistrées dans une table Delta dans un nouveau DataFrame afin de préparer le nettoyage et l’amélioration de ces données pour des analyses ultérieures.
Copiez et collez le code suivant dans la nouvelle cellule de notebook vide.
Python
df_raw = spark.read.table(f"{path_table}.{table_name}") display(df_raw)
Scala
val dfRaw = spark.read.table(s"${pathTable}.${tableName}") display(dfRaw)
R
# Load the SparkR package that is already preinstalled on the cluster. library(SparkR) df_raw = sql(paste0("SELECT * FROM ", path_table, ".", table_name)) display(df_raw)
Appuyez sur
Shift+Enter
pour exécuter la cellule et passer à la cellule suivante.
Étape 4 : nettoyage, amélioration des données brutes et enregistrement
Dans cette étape, vous changez le nom de la colonne Year
, modifiez les données de la colonne First_Name
en plaçant une majuscule au début, mettez à jour les valeurs de la colonne Sex
pour épeler le sexe et enregistrez le DataFrame dans une nouvelle table.
Copiez et collez le code suivant dans une cellule de notebook vide.
Python
from pyspark.sql.functions import col, initcap, when # Rename "Year" column to "Year_Of_Birth" df_rename_year = df_raw.withColumnRenamed("Year", "Year_Of_Birth") # Change the case of "First_Name" column to initcap df_init_caps = df_rename_year.withColumn("First_Name", initcap(col("First_Name").cast("string"))) # Update column values from "M" to "male" and "F" to "female" df_baby_names_sex = df_init_caps.withColumn( "Sex", when(col("Sex") == "M", "Male") .when(col("Sex") == "F", "Female") ) # display display(df_baby_names_sex) # Save DataFrame to table df_baby_names_sex.write.mode("overwrite").saveAsTable(f"{path_table}.{silver_table_name}")
Scala
import org.apache.spark.sql.functions.{col, initcap, when} // Rename "Year" column to "Year_Of_Birth" val dfRenameYear = dfRaw.withColumnRenamed("Year", "Year_Of_Birth") // Change the case of "First_Name" data to initial caps val dfNameInitCaps = dfRenameYear.withColumn("First_Name", initcap(col("First_Name").cast("string"))) // Update column values from "M" to "Male" and "F" to "Female" val dfBabyNamesSex = dfNameInitCaps.withColumn("Sex", when(col("Sex") equalTo "M", "Male") .when(col("Sex") equalTo "F", "Female")) // Display the data display(dfBabyNamesSex) // Save DataFrame to a table dfBabyNamesSex.write.mode("overwrite").saveAsTable(s"${pathTable}.${silverTableName}")
R
# Rename "Year" column to "Year_Of_Birth" df_rename_year <- withColumnRenamed(df_raw, "Year", "Year_Of_Birth") # Change the case of "First_Name" data to initial caps df_init_caps <- withColumn(df_rename_year, "First_Name", initcap(df_rename_year$First_Name)) # Update column values from "M" to "Male" and "F" to "Female" df_baby_names_sex <- withColumn(df_init_caps, "Sex", ifelse(df_init_caps$Sex == "M", "Male", ifelse(df_init_caps$Sex == "F", "Female", df_init_caps$Sex))) # Display the data display(df_baby_names_sex) # Save DataFrame to a table saveAsTable(df_baby_names_sex, paste(path_table, ".", silver_table_name), mode = "overwrite")
Appuyez sur
Shift+Enter
pour exécuter la cellule et passer à la cellule suivante.
Étape 5 : regrouper et visualiser les données
Dans cette étape, vous filtrez les données pour obtenir l’année 2021 uniquement, regroupez les données par nom et sexe, agrégez et triez par nombre. Vous enregistrez ensuite le DataFrame dans une table, puis visualisez les données dans un graphique à barres.
Copiez et collez le code suivant dans une cellule de notebook vide.
Python
from pyspark.sql.functions import expr, sum, desc from pyspark.sql import Window # Count of names for entire state of New York by sex df_baby_names_2021_grouped=(df_baby_names_sex .filter(expr("Year_Of_Birth == 2021")) .groupBy("Sex", "First_Name") .agg(sum("Count").alias("Total_Count")) .sort(desc("Total_Count"))) # Display data display(df_baby_names_2021_grouped) # Save DataFrame to a table df_baby_names_2021_grouped.write.mode("overwrite").saveAsTable(f"{path_table}.{gold_table_name}")
Scala
import org.apache.spark.sql.functions.{expr, sum, desc} import org.apache.spark.sql.expressions.Window // Count of male and female names for entire state of New York by sex val dfBabyNames2021Grouped = dfBabyNamesSex .filter(expr("Year_Of_Birth == 2021")) .groupBy("Sex", "First_Name") .agg(sum("Count").alias("Total_Count")) .sort(desc("Total_Count")) // Display data display(dfBabyNames2021Grouped) // Save DataFrame to a table dfBabyNames2021Grouped.write.mode("overwrite").saveAsTable(s"${pathTable}.${goldTableName}")
R
# Filter to only 2021 data df_baby_names_2021 <- filter(df_baby_names_sex, df_baby_names_sex$Year_Of_Birth == 2021) # Count of names for entire state of New York by sex df_baby_names_grouped <- agg( groupBy(df_baby_names_2021, df_baby_names_2021$Sex, df_baby_names_2021$First_Name), Total_Count = sum(df_baby_names_2021$Count) ) # Display data display(arrange(select(df_baby_names_grouped, df_baby_names_grouped$Sex, df_baby_names_grouped$First_Name, df_baby_names_grouped$Total_Count), desc(df_baby_names_grouped$Total_Count))) # Save DataFrame to a table saveAsTable(df_baby_names_2021_grouped, paste(path_table, ".", gold_table_name), mode = "overwrite")
Appuyez sur
Ctrl+Enter
pour exécuter la cellule.-
- Près de l’onglet Table, cliquez sur +, puis sur Visualisation.
Dans l’éditeur de visualisation, cliquez sur Type de visualisation, puis vérifiez que l’option Barres est sélectionnée.
Dans la Colonne X, sélectionnez
First_Name
.Cliquez sur Ajouter une colonne sous Colonnes Y, puis sélectionnez Total_Count.
Dans Regrouper par, sélectionnez Sexe.
Cliquez sur Enregistrer.
Nettoyer et améliorer les notebooks de données
Utilisez l’un des notebooks suivants pour effectuer les étapes contenues dans cet article. Remplacez <catalog-name>
, <schema-name>
et <volume-name>
par les noms de catalogue, de schéma et de volume d’un volume Unity Catalog. Remplacez éventuellement la valeur table_name
par le nom de table de votre choix.