概要: 追加のデータを取り込んで挿入する
この概要記事では、Azure Databricks ノートブックを使用して、追加の赤ちゃんの名前データを含む CSV ファイルを Unity Catalog ボリュームに取り込み、Python、Scala、R を使用して新しい赤ちゃんの名前データを既存のテーブルにインポートする方法について説明します。
重要
この概要記事は、「概要: ノートブックから CSV データをインポートして視覚化する」に基づいています。 この記事のタスクを完了するには、次の要件を満たす必要があります。 この概要記事の完成したノートブックについては、「データ ノートブックのインポートと視覚化」を参照してください。
要件
この記事のタスクを完了するには、次の要件を満たす必要があります。
- ワークスペースで 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>" volume = "<volume_name>" file_name = "new_baby_names.csv" table_name = "baby_names" path_volume = "/Volumes/" + catalog + "/" + schema + "/" + volume path_table = catalog + "." + schema print(path_table) # Show the complete path print(path_volume) # Show the complete path
Scala
val catalog = "<catalog_name>" val schema = "<schema_name>" val volume = "<volume_name>" val fileName = "new_baby_names.csv" val tableName = "baby_names" val pathVolume = s"/Volumes/${catalog}/${schema}/${volume}" val pathTable = s"${catalog}.${schema}" print(pathVolume) // Show the complete path print(pathTable) // Show the complete path
R
catalog <- "<catalog_name>" schema <- "<schema_name>" volume <- "<volume_name>" file_name <- "new_baby_names.csv" table_name <- "baby_names" path_volume <- paste0("/Volumes/", catalog, "/", schema, "/", volume, sep = "") path_table <- paste0(catalog, ".", schema, sep = "") print(path_volume) # Show the complete path print(path_table) # Show the complete path
手順 3: データの新しい CSV ファイルを Unity Catalog ボリュームに追加する
この手順では、2022 年の新しい赤ちゃんの名前が含まれた df
という名前の DataFrame を作成し、そのデータを Unity Catalog ボリューム内の新しい CSV ファイルに保存します。
Note
この手順では、前年に読み込まれた既存のデータに新しい年次データを追加することをシミュレートします。 運用環境では、この増分データはクラウド ストレージに保存されます。
次のコードをコピーして、新しい空のノートブック セルに貼り付けます。 このコードは、追加の赤ちゃんの名前データを含む DataFrame を作成し、そのデータを Unity Catalog ボリューム内の CSV ファイルに書き込みます。
Python
data = [[2022, "CARL", "Albany", "M", 42]] df = spark.createDataFrame(data, schema="Year int, First_Name STRING, County STRING, Sex STRING, Count int") # display(df) (df.coalesce(1) .write .option("header", "true") .mode("overwrite") .csv(f"{path_volume}/{file_name}"))
Scala
val data = Seq((2022, "CARL", "Albany", "M", 42)) val columns = Seq("Year", "First_Name", "County", "Sex", "Count") val df = data.toDF(columns: _*) // display(df) df.coalesce(1) .write .option("header", "true") .mode("overwrite") .csv(f"{pathVolume}/{fileName}")
R
# Load the SparkR package that is already preinstalled on the cluster. library(SparkR) data <- data.frame(Year = 2022, First_Name = "CARL", County = "Albany", Sex = "M", Count = 42) df <- createDataFrame(data) # display(df) write.df(df, path = paste0(path_volume, "/", file_name), source = "csv", mode = "overwrite", header = "true")
Shift+Enter
キーを押してセルを実行してから、次のセルに移動します。
手順 4: CSV ファイルから DataFrame にデータを読み込む
Note
この手順では、クラウド ストレージからのデータの読み込みをシミュレートします。
次のコードをコピーして、空のノートブック セルに貼り付けます。 このコードは、新しい赤ちゃんの名前データを CSV ファイルから新しい DataFrame に読み込みます。
Python
df1 = spark.read.csv(f"{path_volume}/{file_name}", header=True, inferSchema=True, sep=",") display(df1)
Scala
val df1 = spark.read .option("header", "true") .option("inferSchema", "true") .option("delimiter", ",") .csv(s"$pathVolume/$fileName") display(df1)
R
df1 <- read.df(paste0(path_volume, "/", file_name), source = "csv", header = TRUE, inferSchema = TRUE) display(df1)
Shift+Enter
キーを押してセルを実行してから、次のセルに移動します。
手順 5: 既存のテーブルに挿入する
次のコードをコピーして、空のノートブック セルに貼り付けます。 このコードは、新しい赤ちゃんの名前データを DataFrame から既存のテーブルに追加します。
Python
df.write.mode("append").insertInto(f"{path_table}.{table_name}") display(spark.sql(f"SELECT * FROM {path_table}.{table_name} WHERE Year = 2022"))
Scala
df1.write.mode("append").insertInto(s"${pathTable}.${tableName}") display(spark.sql(s"SELECT * FROM ${pathTable}.${tableName} WHERE Year = 2022"))
R
# The write.df function in R, as provided by the SparkR package, does not directly support writing to Unity Catalog. # In this example, you write the DataFrame into a temporary view and then use the SQL command to insert data from the temporary view to the Unity Catalog table createOrReplaceTempView(df1, "temp_view") sql(paste0("INSERT INTO ", path_table, ".", table_name, " SELECT * FROM temp_view")) display(sql(paste0("SELECT * FROM ", path_table, ".", table_name, " WHERE Year = 2022")))
Ctrl+Enter
キーを押してセルを実行します。
追加のデータ ノートブックを取り込む
この記事の手順を実行するには、次のいずれかのノートブックを使用します。 <catalog-name>
、<schema-name>
、<volume-name>
を、Unity Catalog ボリュームのカタログ、スキーマ、ボリュームの名前に置き換えます。 オプションとして、table_name
を、任意のテーブル名に置き換えます。
Python
Python を使用して追加のデータを取り込んで挿入する
Scala
Scala を使用して追加のデータを取り込んで挿入する
R
R を使用して追加のデータを取り込んで挿入する
次のステップ
データのクレンジングと拡張の詳細については、「概要: データの強化とクレンジング」を参照してください。