次の方法で共有


概要: 追加のデータを取り込んで挿入する

この概要記事では、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: 変数を定義する

この手順では、この記事で作成するノートブックの例で使用する変数を定義します。

  1. 次のコードをコピーして、新しい空のノートブック セルに貼り付けます。 <catalog-name><schema-name><volume-name> を、Unity Catalog ボリュームのカタログ、スキーマ、ボリュームの名前に置き換えます。 オプションとして、table_name を、任意のテーブル名に置き換えます。 この記事の後半で、このテーブルに赤ちゃんの名前のデータを保存します。

  2. 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

この手順では、前年に読み込まれた既存のデータに新しい年次データを追加することをシミュレートします。 運用環境では、この増分データはクラウド ストレージに保存されます。

  1. 次のコードをコピーして、新しい空のノートブック セルに貼り付けます。 このコードは、追加の赤ちゃんの名前データを含む 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")
    
  2. Shift+Enter キーを押してセルを実行してから、次のセルに移動します。

手順 4: CSV ファイルから DataFrame にデータを読み込む

Note

この手順では、クラウド ストレージからのデータの読み込みをシミュレートします。

  1. 次のコードをコピーして、空のノートブック セルに貼り付けます。 このコードは、新しい赤ちゃんの名前データを 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)
    
  2. Shift+Enter キーを押してセルを実行してから、次のセルに移動します。

手順 5: 既存のテーブルに挿入する

  1. 次のコードをコピーして、空のノートブック セルに貼り付けます。 このコードは、新しい赤ちゃんの名前データを 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")))
    
  2. Ctrl+Enter キーを押してセルを実行します。

追加のデータ ノートブックを取り込む

この記事の手順を実行するには、次のいずれかのノートブックを使用します。 <catalog-name><schema-name><volume-name> を、Unity Catalog ボリュームのカタログ、スキーマ、ボリュームの名前に置き換えます。 オプションとして、table_name を、任意のテーブル名に置き換えます。

Python

Python を使用して追加のデータを取り込んで挿入する

ノートブックを入手

Scala

Scala を使用して追加のデータを取り込んで挿入する

ノートブックを入手

R

R を使用して追加のデータを取り込んで挿入する

ノートブックを入手

次のステップ

データのクレンジングと拡張の詳細については、「概要: データの強化とクレンジング」を参照してください。

その他のリソース