共用方式為


開始使用:增強並清理資料

本入門文章會逐步引導您使用 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:定義變數

在此步驟中,您會定義變數,以用於本文中建立的範例筆記本。

  1. 請將下列程式碼複製並貼到全新空白筆記本資料格。 使用 Unity 目錄磁碟區的目錄、結構描述和磁碟區名稱取代 <catalog-name><schema-name><volume-name>。 選擇性地以您選擇的資料表名稱取代 table_name 值。 本文稍後會將嬰兒姓名資料儲存到此資料表中。

  2. 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,以準備清理及增強此資料並進行進一步分析。

  1. 請將下列程式碼複製並貼到全新空白筆記本資料格。

    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)
    
  2. Shift+Enter 執行此資料格,然後移至下一個資料格。

步驟 4:清理並增強原始資料及儲存

在此步驟中,您會變更 Year 資料行的名稱、將資料行 First_Name 中的資料變更為初始大寫,並更新 Sex 資料列的值來拼出性別,然後將 DataFrame 儲存至新的資料表。

  1. 請將下列程式碼複製並貼到您空白筆記本資料格。

    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")
    
  2. Shift+Enter 執行此資料格,然後移至下一個資料格。

步驟 5:群組與視覺化資料

在此步驟中,您會將資料篩選為僅 2021 年、依性別與名稱分組、依計數匯總,以及依計數排序。 您會將 DataFrame 儲存至資料表,然後將橫條圖的資料表視覺化。

  1. 請將下列程式碼複製並貼到您空白筆記本資料格。

    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")
    
  2. Ctrl+Enter 以執行資料格。

    1. 資料表索引標籤旁,按一下 + ,然後按一下 視覺效果
  3. 在視覺效果編輯器中,按一下視覺效果類型,並確認已選取長條圖

  4. X 資料行,選取First_Name

  5. Y 資料行底下,按一下新增資料行 ,然後選取 Total_Count

  6. 群組中,選取性別

    gold 資料表

  7. 按一下 [檔案] 。

清理與增強資料筆記本

使用下列其中一個筆記本來執行本文章的步驟。 使用 Unity 目錄磁碟區的目錄、結構描述和磁碟區名稱取代 <catalog-name><schema-name><volume-name>。 選擇性地以您選擇的資料表名稱取代 table_name 值。

Python

使用 Python 清理與增強資料

取得筆記本

Scala

使用 Scala 清理與增強資料

取得筆記本

R

使用 R 清理與增強資料

取得筆記本

其他資源