Начало работы. Улучшение и очистка данных
В этой статье описывается использование записной книжки Azure Databricks для очистки и улучшения данных имени ребенка штата Нью-йорк, которые ранее были загружены в таблицу в каталоге Unity с помощью Python, Scala и R. В этой статье вы измените имена столбцов, измените заглавную букву и укажите пол каждого имени ребенка из необработанной таблицы данных, а затем сохраните кадр данных в серебряную таблицу. Затем вы фильтруете данные, чтобы включить только данные в 2021 году, сгруппировать данные на уровне состояния, а затем отсортировать данные по подсчету. Наконец, вы сохраните этот кадр данных в золотую таблицу и визуализируете данные на линейчатой диаграмме. Дополнительные сведения о серебряных и золотых таблицах см . в архитектуре медальона.
Внимание
В этой статье показано, как приступить к работе: прием и вставка дополнительных данных. Чтобы завершить эту статью, необходимо выполнить действия, описанные в этой статье. Полный записной книжки для этой статьи о начале работы см. в разделе "Прием дополнительных записных книжек данных".
Требования
Чтобы выполнить задачи в этой статье, необходимо выполнить следующие требования:
- Рабочая область должна включать каталог Unity. Сведения о начале работы с каталогом Unity см. в разделе "Настройка каталога Unity" и управление ими.
- У вас должны быть
WRITE VOLUME
права на том,USE SCHEMA
привилегии родительской схемы иUSE CATALOG
привилегии родительского каталога. - Необходимо иметь разрешение на использование существующего вычислительного ресурса или создать новый вычислительный ресурс. См. статью "Начало работы: настройка учетной записи и рабочей области " или просмотр администратора Databricks.
Совет
Полный записной книжки для этой статьи см. в статье "Очистка и улучшение записных книжек данных".
Шаг 1. Создание записной книжки
Чтобы создать записную книжку в рабочей области, нажмите кнопку "Создать" на боковой панели и нажмите кнопку "Записная книжка". Пустая записная книжка открывается в рабочей области.
Дополнительные сведения о создании записных книжек и управлении ими см. в статье Управление записными книжками.
Шаг 2. Определение переменных
На этом шаге вы определите переменные для использования в примере записной книжки, создаваемой в этой статье.
Скопируйте и вставьте следующий код в новую пустую ячейку записной книжки. Замените
<catalog-name>
,<schema-name>
а также<volume-name>
именами каталогов, схем и томов для тома каталога Unity. При необходимости замените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. Загрузка необработанных данных в новый кадр данных
Этот шаг загружает необработанные данные, ранее сохраненные в таблицу Delta, в новый кадр данных при подготовке к очистке и улучшению этих данных для дальнейшего анализа.
Скопируйте и вставьте следующий код в новую пустую ячейку записной книжки.
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
столбца, чтобы выписать пол, а затем сохранить кадр данных в новой таблице.
Скопируйте и вставьте следующий код в пустую ячейку записной книжки.
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 году, группируете данные по полу и имени, агрегируете по количеству и заказу по количеству. Затем вы сохраните кадр данных в таблицу, а затем визуализируете данные на линейчатой диаграмме.
Скопируйте и вставьте следующий код в пустую ячейку записной книжки.
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.
В группе по выберите "Секс".
Нажмите кнопку Сохранить.
Очистка и улучшение записных книжек данных
Чтобы выполнить действия, описанные в этой статье, используйте одну из следующих записных книжек. Замените <catalog-name>
, <schema-name>
а также <volume-name>
именами каталогов, схем и томов для тома каталога Unity. При необходимости замените table_name
значение именем таблицы.