はじめに: 追加データの取り込みと挿入
この入門記事では、Databricks ノートブックを使用して、追加の赤ちゃんの名前データを含む CSV ファイルを Unity Catalog ボリュームに取り込み、Python、Scala、R を使用して新しい赤ちゃんの名前データを既存のテーブルにインポートする手順について説明します。
この概要の記事は、「 概要: ノートブックから CSV データをインポートして視覚化する」に基づいています。 この記事を完了するには、その記事の手順を完了する必要があります。 その概要記事の完全なノートブックについては、「 データ ノートブックのインポートと視覚化」を参照してください。
必要条件
この記事のタスクを完了するには、次の要件を満たす必要があります。
- ワークスペースで Unity Catalog が有効になっている必要があります。 Unity Catalogの使用を開始する方法については、「Unity Catalogの設定と管理」を参照してください。
- ボリュームに対する
WRITE VOLUME
権限、親スキーマに対するUSE SCHEMA
権限、および親カタログに対するUSE CATALOG
権限が必要です。 - 既存のコンピュート リソースを使用するか、新しいコンピュート リソースを作成するには、アクセス許可が必要です。 「Databricks の使用を開始する」または「Databricks 管理者に問い合わせてください」を参照してください。
この記事の完成したノートブックについては、「 追加のデータ ノートブックの取り込み」を参照してください。
ステップ 1: 新しいノートブックを作成する
ワークスペースにノートブックを作成するには、サイドバーの「 新規 」をクリックし、「 ノートブック 」をクリックします。空白のノートブックがワークスペースで開きます。
ノートブックの作成と管理の詳細については、「 ノートブックの管理」を参照してください。
ステップ 2: 変数を定義する
この手順では、この記事で作成するサンプル ノートブックで使用する変数を定義します。
-
次のコードをコピーして、新しい空のノートブック セルに貼り付けます。
<catalog-name>
、<schema-name>
、および<volume-name>
を、Unity Catalog ボリュームのカタログ、スキーマ、およびボリューム名に置き換えます。必要に応じて、table_name
値を任意のテーブル名に置き換えます。 赤ちゃんの名前のデータは、この記事の後半でこのテーブルに保存します。 -
Shift+Enter
を押すとセルが実行され、新しい空白のセルが作成されます。
- Python
- Scala
- R
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
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
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
」というデータフレームを作成し、そのデータをUnity Catalogボリューム内の新しいCSVファイルに保存します。
このステップでは、以前の年のロード済みの既存データに新しい年のデータを追加するシミュレーションを行います。本番運用環境では、この増分データはクラウドストレージに保存されます。
- 次のコードをコピーして、新しい空のノートブックセルに貼り付けます。このコードは、赤ちゃんの名前データを追加したデータフレームを作成し、そのデータをUnity CatalogボリュームのCSVファイルに書き込みます。
- Python
- Scala
- R
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}"))
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}")
# 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ファイルからデータフレームにデータをロードする
このステップでは、クラウドストレージからデータをロードするシミュレーションを行います。
- 次のコードをコピーして、ノートブックの空のセルに貼り付けます。このコードは、新しい赤ちゃんの名前データをCSVファイルから新しいデータフレームにロードします。
- Python
- Scala
- R
df1 = spark.read.csv(f"{path_volume}/{file_name}",
header=True,
inferSchema=True,
sep=",")
display(df1)
val df1 = spark.read
.option("header", "true")
.option("inferSchema", "true")
.option("delimiter", ",")
.csv(s"$pathVolume/$fileName")
display(df1)
df1 <- read.df(paste0(path_volume, "/", file_name),
source = "csv",
header = TRUE,
inferSchema = TRUE)
display(df1)
Shift+Enter
を押してセルを実行し、次のセルに移動します。
ステップ 5: 既存のテーブルに挿入する
- 次のコードをコピーして、ノートブックの空のセルに貼り付けます。このコードは、新しい赤ちゃんの名前データをデータフレームからの既存のテーブルに追加します。
- Python
- Scala
- R
df.write.mode("append").insertInto(f"{path_table}.{table_name}")
display(spark.sql(f"SELECT * FROM {path_table}.{table_name} WHERE Year = 2022"))
df1.write.mode("append").insertInto(s"${pathTable}.${tableName}")
display(spark.sql(s"SELECT * FROM ${pathTable}.${tableName} WHERE Year = 2022"))
# 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
- Scala
- R
Ingest and insert additional data using Python
Ingest and insert additional data using Scala
Ingest and insert additional data using R
次のステップ
データのクレンジングと拡張の詳細については、「 はじめに: データの拡張とクレンジング」を参照してください。