Wprowadzenie: ulepszanie i oczyszczanie danych
Ten artykuł z wprowadzeniem przeprowadzi Cię przez proces używania notesu usługi Azure Databricks w celu oczyszczenia i ulepszenia danych nazwy dziecka stanu Nowy Jork, które zostały wcześniej załadowane do tabeli w wykazie aparatu Unity przy użyciu języków Python, Scala i R. W tym artykule zmienisz nazwy kolumn, zmienisz wielkie litery i określisz płeć każdej nazwy dziecka z nieprzetworzonej tabeli danych, a następnie zapiszesz ramkę danych w srebrnej tabeli. Następnie przefiltrujesz dane, aby uwzględnić tylko dane dla roku 2021, pogrupujesz dane na poziomie stanu, a następnie posortujesz dane według liczby. Na koniec zapiszesz tę ramkę danych w złotej tabeli i zwizualizujesz dane na wykresie słupkowym. Aby uzyskać więcej informacji na temat srebrnych i złotych tabel, zobacz architektura medalonu.
Ważne
Ten artykuł z wprowadzeniem opiera się na artykule Wprowadzenie: pozyskiwanie i wstawianie dodatkowych danych. Aby ukończyć ten artykuł, należy wykonać kroki opisane w tym artykule. Aby zapoznać się z pełnym notesem dotyczącym tego artykułu wprowadzającego, zobacz Pozyskiwanie dodatkowych notesów danych.
Wymagania
Aby wykonać zadania opisane w tym artykule, musisz spełnić następujące wymagania:
- Obszar roboczy musi mieć włączony katalog aparatu Unity. Aby uzyskać informacje na temat rozpoczynania pracy z wykazem aparatu Unity, zobacz Konfigurowanie wykazu aparatu Unity i zarządzanie nim.
- Musisz mieć
WRITE VOLUME
uprawnienia do woluminu,USE SCHEMA
uprawnienia w schemacie nadrzędnym iUSE CATALOG
uprawnienia w katalogu nadrzędnym. - Musisz mieć uprawnienia do używania istniejącego zasobu obliczeniowego lub utworzenia nowego zasobu obliczeniowego. Zobacz Wprowadzenie: Konfiguracja konta i obszaru roboczego lub zobacz administratora usługi Databricks.
Napiwek
Aby zapoznać się z ukończonym notesem dla tego artykułu, zobacz Oczyszczanie i ulepszanie notesów danych.
Krok 1. Tworzenie nowego notesu
Aby utworzyć notes w obszarze roboczym, kliknij pozycję Nowy na pasku bocznym, a następnie kliknij przycisk Notes. W obszarze roboczym zostanie otwarty pusty notes.
Aby dowiedzieć się więcej na temat tworzenia notesów i zarządzania nimi, zobacz Zarządzanie notesami.
Krok 2. Definiowanie zmiennych
W tym kroku zdefiniujesz zmienne do użycia w przykładowym notesie utworzonym w tym artykule.
Skopiuj i wklej następujący kod do nowej pustej komórki notesu. Zastąp
<catalog-name>
wartości ,<schema-name>
i<volume-name>
nazwami wykazu, schematu i woluminu dla woluminu wykazu aparatu Unity. Opcjonalnie zastąptable_name
wartość wybraną nazwą tabeli. Dane nazwy dziecka zostaną zapisane w tej tabeli w dalszej części tego artykułu.Naciśnij
Shift+Enter
, aby uruchomić komórkę i utworzyć nową pustą komórkę.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
Krok 3. Ładowanie danych pierwotnych do nowej ramki danych
Ten krok ładuje nieprzetworzone dane wcześniej zapisane w tabeli delty do nowej ramki danych w ramach przygotowań do czyszczenia i ulepszania tych danych w celu dalszej analizy.
Skopiuj i wklej następujący kod do nowej pustej komórki notesu.
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)
Naciśnij ,
Shift+Enter
aby uruchomić komórkę, a następnie przejdź do następnej komórki.
Krok 4. Oczyszczanie i ulepszanie danych pierwotnych i zapisywanie
W tym kroku zmienisz nazwę Year
kolumny, zmienisz dane w First_Name
kolumnie na początkowe litery i zaktualizujesz wartości Sex
kolumny, aby wypisać płeć, a następnie zapisać ramkę danych w nowej tabeli.
Skopiuj i wklej następujący kod do pustej komórki notesu.
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")
Naciśnij ,
Shift+Enter
aby uruchomić komórkę, a następnie przejdź do następnej komórki.
Krok 5. Grupowanie i wizualizowanie danych
W tym kroku przefiltrujesz dane tylko do roku 2021, pogrupujesz dane według płci i nazwy, agregujesz według liczby i porządkuj według liczby. Następnie zapisz ramkę danych w tabeli, a następnie zwizualizuj dane na wykresie słupkowym.
Skopiuj i wklej następujący kod do pustej komórki notesu.
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")
Naciśnij ,
Ctrl+Enter
aby uruchomić komórkę.-
- Obok karty Tabela kliknij+, a następnie kliknij pozycję Wizualizacja.
W edytorze wizualizacji kliknij pozycję Typ wizualizacji i sprawdź, czy wybrano pasek .
W kolumnie X wybierz pozycję
First_Name
.Kliknij pozycję Dodaj kolumnę w obszarze Kolumny Y, a następnie wybierz pozycję Total_Count.
W obszarze Grupuj według wybierz pozycję Seks.
Kliknij przycisk Zapisz.
Oczyszczanie i ulepszanie notesów danych
Aby wykonać kroki opisane w tym artykule, użyj jednego z poniższych notesów. Zastąp <catalog-name>
wartości , <schema-name>
i <volume-name>
nazwami wykazu, schematu i woluminu dla woluminu wykazu aparatu Unity. Opcjonalnie zastąp table_name
wartość wybraną nazwą tabeli.