Поделиться через


Начало работы. Улучшение и очистка данных

В этой статье описывается использование записной книжки Azure Databricks для очистки и улучшения данных имени ребенка штата Нью-йорк, которые ранее были загружены в таблицу в каталоге Unity с помощью Python, Scala и R. В этой статье вы измените имена столбцов, измените заглавную букву и укажите пол каждого имени ребенка из необработанной таблицы данных, а затем сохраните кадр данных в серебряную таблицу. Затем вы фильтруете данные, чтобы включить только данные в 2021 году, сгруппировать данные на уровне состояния, а затем отсортировать данные по подсчету. Наконец, вы сохраните этот кадр данных в золотую таблицу и визуализируете данные на линейчатой диаграмме. Дополнительные сведения о серебряных и золотых таблицах см . в архитектуре медальона.

Внимание

В этой статье показано, как приступить к работе: прием и вставка дополнительных данных. Чтобы завершить эту статью, необходимо выполнить действия, описанные в этой статье. Полный записной книжки для этой статьи о начале работы см. в разделе "Прием дополнительных записных книжек данных".

Требования

Чтобы выполнить задачи в этой статье, необходимо выполнить следующие требования:

  • Рабочая область должна включать каталог Unity. Сведения о начале работы с каталогом Unity см. в разделе "Настройка каталога Unity" и управление ими.
  • У вас должны быть WRITE VOLUME права на том, USE SCHEMA привилегии родительской схемы и USE CATALOG привилегии родительского каталога.
  • Необходимо иметь разрешение на использование существующего вычислительного ресурса или создать новый вычислительный ресурс. См. статью "Начало работы: настройка учетной записи и рабочей области " или просмотр администратора Databricks.

Совет

Полный записной книжки для этой статьи см. в статье "Очистка и улучшение записных книжек данных".

Шаг 1. Создание записной книжки

Чтобы создать записную книжку в рабочей области, нажмите кнопку Значок "Создать" на боковой панели и нажмите кнопку "Записная книжка". Пустая записная книжка открывается в рабочей области.

Дополнительные сведения о создании записных книжек и управлении ими см. в статье Управление записными книжками.

Шаг 2. Определение переменных

На этом шаге вы определите переменные для использования в примере записной книжки, создаваемой в этой статье.

  1. Скопируйте и вставьте следующий код в новую пустую ячейку записной книжки. Замените <catalog-name>, <schema-name>а также <volume-name> именами каталогов, схем и томов для тома каталога Unity. При необходимости замените 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. Загрузка необработанных данных в новый кадр данных

Этот шаг загружает необработанные данные, ранее сохраненные в таблицу Delta, в новый кадр данных при подготовке к очистке и улучшению этих данных для дальнейшего анализа.

  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 столбца, чтобы выписать пол, а затем сохранить кадр данных в новой таблице.

  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 году, группируете данные по полу и имени, агрегируете по количеству и заказу по количеству. Затем вы сохраните кадр данных в таблицу, а затем визуализируете данные на линейчатой диаграмме.

  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. В группе по выберите "Секс".

    золотая таблица

  7. Нажмите кнопку Сохранить.

Очистка и улучшение записных книжек данных

Чтобы выполнить действия, описанные в этой статье, используйте одну из следующих записных книжек. Замените <catalog-name>, <schema-name>а также <volume-name> именами каталогов, схем и томов для тома каталога Unity. При необходимости замените table_name значение именем таблицы.

Python

Очистка и улучшение данных с помощью Python

Получить записную книжку

Scala

Очистка и улучшение данных с помощью Scala

Получить записную книжку

R

Очистка и улучшение данных с помощью R

Получить записную книжку

Дополнительные ресурсы