概要: データの強化とクレンジング
この入門記事では、Azure Databricks ノートブックを使用して、Python、Scala、R を使用して Unity カタログのテーブルに以前に読み込まれたニューヨーク州の赤ちゃんの名前データをクレンジングおよび強化する方法について説明します。この記事では、生データ テーブルに対し、列名の変更、大文字の変更、各赤ちゃんの名前の性別をスペルに変更し、その後に DataFrame をシルバー テーブルに保存します。 そして、データをフィルター処理して 2021 年のデータのみを含むようにし、状態レベルでデータをグループ化し、カウント順でデータを並べ替えます。 最後に、この DataFrame をゴールド テーブルに保存し、横棒グラフでデータを視覚化します。 シルバー テーブルとゴールド テーブルの詳細については、「medallion アーキテクチャ」を参照してください。
重要
本概要記事は、「概要: 追加のデータを取り込んで挿入する」に基づいています。 この記事の手順を完了することが、本記事のタスクを完了するためには必要です。 この概要記事の完成したノートブックについては、「データのインポートと視覚化 ノートブック」を参照してください。
要件
この記事のタスクを完了するには、次の要件を満たす必要があります。
- ワークスペースで Unity Catalog が有効になっている必要があります。 Unity Catalog の概要については、「Unity Catalog の設定と管理」を参照してください。
- ボリュームの
WRITE VOLUME
権限、親スキーマのUSE SCHEMA
権限、親カタログのUSE CATALOG
権限が必要です。 - 既存のコンピューティング リソースを使用するか、新しいコンピューティング リソースを作成するためのアクセス許可が必要です。 「はじめに: アカウントとワークスペースのセットアップ」を参照するか、Databricks 管理者に問い合わせてください。
ヒント
本記事の完成したノートブックについては、「データのクレンジングと強化ノートブック」を参照してください。
手順 1: 新しいノートブックを作成する
ワークスペースにノートブックを作成するには、サイドバーの [新規] をクリックしてから、[ノートブック] をクリックします。 ワークスペースに空のノートブックが開きます。
ノートブックの作成と管理について詳しくは、「Notebooks を管理する」を参照してください。
手順 2: 変数を定義する
この手順では、この記事で作成するノートブックの例で使用する変数を定義します。
次のコードをコピーして、新しい空のノートブック セルに貼り付けます。
<catalog-name>
、<schema-name>
、<volume-name>
を、Unity Catalog ボリュームのカタログ、スキーマ、ボリュームの名前に置き換えます。 オプションとして、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] を選択します。
[グループ化] で、[性別] を選択します。
[保存] をクリックします。
データのクレンジングと強化ノートブック
この記事の手順を実行するには、次のいずれかのノートブックを使用します。 <catalog-name>
、<schema-name>
、<volume-name>
を、Unity Catalog ボリュームのカタログ、スキーマ、ボリュームの名前に置き換えます。 オプションとして、table_name
を、任意のテーブル名に置き換えます。