開始使用:增強並清理資料
本入門文章會逐步引導您使用 Azure Databricks 筆記本來清理及增強先前使用 Python、Scala 與 R 載入 Unity 目錄中資料表的紐約州嬰兒姓名資料。在本文中,您會變更資料行名稱、變更大小寫,以及從原始資料表中拼出每個嬰兒姓名的性別 ,然後將 DataFrame 儲存至 Silver 資料表。 然後,您可以篩選資料,以儘包含 2021 的資料、將狀態等級的資料分組,然後依計數排序資料。 最後,您會將此 DataFrame 儲存至 Gold 資料表,並將橫條圖的資料表視覺化。 如需 silver 與 gold 資料表的詳細資訊,請參閱 medallion 結構。
重要
此入門文章是組建在 開始使用: 內嵌與插入其他資料為基礎。 若要完成本文中的步驟,您必須: 如需該入門文章的完整筆記本,請參閱 內嵌其他資料筆記本。
需求
若要完成這項工作,請確定您符合下列需求:
- 工作區必須已啟用 Unity 目錄 。 如需開始使用 Unity 目錄的資訊,請參閱 設定與管理 Unity 目錄。
- 您必須具有磁碟區的
WRITE VOLUME
權限、家長結構描述的USE SCHEMA
權限,以及家長目錄的USE CATALOG
權限。 - 您必須擁有使用現有計算資源或建立新計算資源的權限。 請參閱 開始使用:帳戶與工作區設定 ,或查看您的 Databricks 系統管理員。
提示
如需本文已完成的筆記本,請參閱 清理與增強資料筆記本。
步驟 1:建立新的筆記本。
若要在工作區中建立筆記本,請按一下提要欄位的 新增 ,然後按一下 筆記本。 空白筆記本會在工作區中開啟。
若要深入瞭解如何建立並管理筆記本,請參閱 管理筆記本。
步驟 2:定義變數
在此步驟中,您會定義變數,以用於本文中建立的範例筆記本。
請將下列程式碼複製並貼到全新空白筆記本資料格。 使用 Unity 目錄磁碟區的目錄、結構描述和磁碟區名稱取代
<catalog-name>
、<schema-name>
和<volume-name>
。 選擇性地以您選擇的資料表名稱取代table_name
值。 本文稍後會將嬰兒姓名資料儲存到此資料表中。按
Shift+Enter
以執行資料格並建立新的空白資料格。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
步驟 3:將原始資料載入新的 DataFrame
此步驟會將先前儲存至 Delta 資料表的原始資料載入至新的 DataFrame,以準備清理及增強此資料並進行進一步分析。
請將下列程式碼複製並貼到全新空白筆記本資料格。
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)
按
Shift+Enter
執行此資料格,然後移至下一個資料格。
步驟 4:清理並增強原始資料及儲存
在此步驟中,您會變更 Year
資料行的名稱、將資料行 First_Name
中的資料變更為初始大寫,並更新 Sex
資料列的值來拼出性別,然後將 DataFrame 儲存至新的資料表。
請將下列程式碼複製並貼到您空白筆記本資料格。
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")
按
Shift+Enter
執行此資料格,然後移至下一個資料格。
步驟 5:群組與視覺化資料
在此步驟中,您會將資料篩選為僅 2021 年、依性別與名稱分組、依計數匯總,以及依計數排序。 您會將 DataFrame 儲存至資料表,然後將橫條圖的資料表視覺化。
請將下列程式碼複製並貼到您空白筆記本資料格。
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")
按
Ctrl+Enter
以執行資料格。-
- 在資料表索引標籤旁,按一下 + ,然後按一下 視覺效果。
在視覺效果編輯器中,按一下視覺效果類型,並確認已選取長條圖 。
在 X 資料行,選取
First_Name
。在 Y 資料行底下,按一下新增資料行 ,然後選取 Total_Count。
在群組中,選取性別。
按一下 [檔案] 。
清理與增強資料筆記本
使用下列其中一個筆記本來執行本文章的步驟。 使用 Unity 目錄磁碟區的目錄、結構描述和磁碟區名稱取代 <catalog-name>
、<schema-name>
和 <volume-name>
。 選擇性地以您選擇的資料表名稱取代 table_name
值。