次の方法で共有


OneLake と Azure Databricks の統合

このシナリオでは、Azure Databricks 経由で OneLake に接続する方法を示します。 このチュートリアルを完了すると、Azure Databricks ワークスペースから Microsoft Fabric Lakehouse を読み書きできるようになります。

[前提条件]

接続する前に、以下が必要になります。

  • ファブリック ワークスペースとレイクハウス。
  • Premium Azure Databricks ワークスペース。 このシナリオで必要な Microsoft Entra 資格情報パススルーは、Premium Azure Databricks ワークスペースでのみサポートされます。

Databricks ワークスペースを設定する

  1. Azure Databricks ワークスペースを開き、[作成>クラスター] を選択します

  2. Microsoft Entra ID を使用して OneLake に対して認証を行うには、[詳細オプション] でクラスターで Azure Data Lake Storage (ADLS) 資格情報パススルーを有効にする必要があります。

    [詳細オプション] 画面で [クラスターの作成] を選択する場所を示すスクリーンショット。

    サービス プリンシパルを使用して Databricks を OneLake に接続することもできます。 サービス プリンシパルを使用した Azure Databricks の認証の詳細については、「サービス プリンシパルの管理」を参照してください。

  3. 任意のパラメーターを使用してクラスターを作成します。 Databricks クラスターの作成の詳細については、「クラスターの 構成 - Azure Databricks」を参照してください。

  4. ノートブックを開き、新しく作成したクラスターに接続します。

ノートブックを作成する

  1. Fabric Lakehouse に移動し、Azure Blob Filesystem (ABFS) パスを lakehouse にコピーします。 [プロパティ] ウィンドウで見つけることができます。

    Azure Databricks では、ADLS Gen2 と OneLake: abfss://myWorkspace@onelake.dfs.fabric.microsoft.com/に対する読み取りと書き込み時にのみ、Azure Blob Filesystem (ABFS) ドライバーがサポートされます。

  2. Databricks ノートブックにレイクハウスへのパスを保存します。 この lakehouse では、後で処理されたデータを書き込みます。

    oneLakePath = 'abfss://myWorkspace@onelake.dfs.fabric.microsoft.com/myLakehouse.lakehouse/Files/'
    
  3. Databricks パブリック データセットからデータフレームにデータを読み込みます。 Fabric の他の場所からファイルを読み取ったり、既に所有している別の ADLS Gen2 アカウントからファイルを選択したりすることもできます。

    yellowTaxiDF = spark.read.format("csv").option("header", "true").option("inferSchema", "true").load("/databricks-datasets/nyctaxi/tripdata/yellow/yellow_tripdata_2019-12.csv.gz")
    
  4. データをフィルター処理、変換、または準備します。 このシナリオでは、データセットをトリミングして、読み込みを高速化したり、他のデータセットと結合したり、特定の結果に絞り込んだりすることができます。

    filteredTaxiDF = yellowTaxiDF.where(yellowTaxiDF.fare_amount<4).where(yellowTaxiDF.passenger_count==4)
    display(filteredTaxiDF)
    
  5. OneLake パスを使用して、フィルター処理されたデータフレームを Fabric Lakehouse に書き込みます。

    filteredTaxiDF.write.format("csv").option("header", "true").mode("overwrite").csv(oneLakePath)
    
  6. 新しく読み込まれたファイルを読み取って、データが正常に書き込まれたことをテストします。

    lakehouseRead = spark.read.format('csv').option("header", "true").load(oneLakePath)
    display(lakehouseRead.limit(10))
    

これでセットアップが完了し、Azure Databricks を使用して Fabric でデータを読み書きできるようになりました。

Databricks サーバーレス コンピューティングを使用した OneLake への接続

Databricks サーバーレス コンピューティング を使用すると、クラスターをプロビジョニングせずにワークロードを実行できます。 Databricks のサーバーレス ドキュメントに従って、サーバーレス コンピューティングでの Spark の構成を自動化するために、Databricks サーバーレスでは、ここに記載されているサポートされているプロパティの外部で Spark プロパティを構成することはできません。

この制限は、Azure Databricks に固有の制限ではありません。 アマゾン ウェブ サービス (AWS)Google Cloud での Databricks サーバーレス実装も同じ動作を示します。

Databricks サーバーレス コンピューティングにリンクされているノートブックでサポートされていない Spark 構成を変更または設定しようとすると、システムからCONFIG_NOT_AVAILABLE エラーが返されます。

ユーザーがサーバーレス コンピューティングでサポートされていない Spark 構成を変更しようとした場合のエラー メッセージを示すスクリーンショット。

OneLake では、Databricks サーバーレス コンピューティングからの受信接続がサポートされています。 適切なアクセス権があり、Databricks サーバーレス コンピューティングと OneLake の間にネットワーク パスがある場合は、(Databricks サーバーレス コンピューティングから) OneLake に接続できます。 Databricks サーバーレスでは、サポートされていない Spark プロパティがコードによって変更されないようにする必要があります。

[前提条件]

接続する前に、以下が必要になります。

  • ファブリック ワークスペースとレイクハウス。
  • Premium Azure Databricks ワークスペース。
  • 最小限でも共同作成者のワークスペース ロールが割り当てられているサービス プリンシパル。
  • シークレットを格納および取得するためのデータベース シークレットまたは Azure Key Vault (AKV)。 この例では、Databricks シークレットを使用します。

ノートブックを作成する

  1. Databricks ワークスペースにノートブックを作成し、サーバーレス コンピューティングにアタッチします。

    Databricks ノートブックをサーバーレス コンピューティングに接続する方法を示すスクリーンショット。

  2. Python モジュールをインポートする - このサンプルでは、次の 3 つのモジュールを使用しています。

    • msal は Microsoft Authentication Library (MSAL) であり、開発者が Microsoft ID プラットフォーム認証をアプリケーションに統合できるように設計されています。
    • 要求 モジュールは、Python を使用して HTTP 要求を行うために使用されます。
    • delta lake は、Python を使用して Delta Lake テーブルの読み取りと書き込みを行うために使用されます。
    from msal import ConfidentialClientApplication
    import requests
    from deltalake import DeltaTable
    
  3. アプリケーション ID を含む Microsoft Entra テナントの変数を宣言します。 Microsoft Fabric がデプロイされているテナントのテナント ID を使用します。

    # Fetch from Databricks secrets.
    tenant_id = dbutils.secrets.get(scope="<replace-scope-name>",key="<replace value with key value for tenant _id>")
    client_id = dbutils.secrets.get(scope="<replace-scope-name>",key="<replace value with key value for client _id>") 
    client_secret = dbutils.secrets.get(scope="<replace-scope-name>",key="<replace value with key value for secret>")
    
  4. Fabric ワークスペース変数を宣言します。

    workspace_id = "<replace with workspace name>"
    lakehouse_id = "<replace with lakehouse name>"
    table_to_read = "<name of lakehouse table to read>"
    storage_account_name = workspace_id
    onelake_uri = f"abfss://{workspace_id}@onelake.dfs.fabric.microsoft.com/{lakehouse_id}.lakehouse/Tables/{table_to_read}"
    
  5. トークンを取得するためにクライアントを初期化します。

    authority = f"https://login.microsoftonline.com/{tenant_id}"
    
    app = ConfidentialClientApplication(
     client_id,
     authority=authority,
     client_credential=client_secret
     )
    
     result = app.acquire_token_for_client(scopes=["https://onelake.fabric.microsoft.com/.default"])
    
     if "access_token" in result:
       access_token = result["access_token"]
       print("Access token acquired.")
       token_val = result['access_token']
    
  6. OneLake からデルタ テーブルを読み取る

    dt = DeltaTable(onelake_uri, storage_options={"bearer_token": f"{token_val}", "use_fabric_endpoint": "true"})
    df = dt.to_pandas()
    print(df.head())
    

    サービス プリンシパルには 共同作成者 ワークスペース ロールの割り当てがあり、それを使用して OneLake にデータを書き戻すことができます。

これでセットアップが完了し、サーバーレス コンピューティングに接続されたノートブックである Databricks を使用して OneLake からデータを読み取ることができます。