次の方法で共有


チュートリアル: FSSPEC を使用して Synapse Analytics のサーバーレス Apache Spark プール内の ADLS データの読み取りと書き込みを行う

Filesystem Spec (FSSPEC) とリンク サービスを使用して、Azure Synapse Analytics のサーバーレス Apache Spark プール内の Azure Data Lake Storage データの読み取りと書き込みを行う方法について説明します。

このチュートリアルで学習する内容は次のとおりです。

  • 専用 Spark セッションで ADLS データの読み取り/書き込みを行います。

Azure サブスクリプションをお持ちでない場合は、開始する前に無料アカウントを作成してください。

前提条件

  • Azure Data Lake Storage Gen2 ストレージ アカウントが既定のストレージとして構成されている Azure Synapse Analytics ワークスペース。 使用する Data Lake Storage Gen2 ファイル システムの "Storage Blob データ共同作成者" である必要があります。
  • Azure Synapse Analytics ワークスペースの Spark プール。 詳細については、Azure Synapse での Spark プールの作成に関する記事を参照してください。

Azure portal にサインインする

Azure portal にサインインします。

リンクされたサービスを作成します

Azure Synapse Analytics で、リンクされたサービスとは、他のサービスへの接続情報を定義した場所です。 このセクションでは、Azure Synapse Analytics および Azure Data Lake Storage Gen2 のリンクされたサービスを追加します。

  1. Azure Synapse Studio を開き、 [管理] タブを選択します。

  2. [外部接続] で、 [リンクされたサービス] を選択します。

  3. リンクされたサービスを追加するには、 [新規] を選択します。

  4. リストから [Azure Data Lake Storage Gen2] タイルを選択し、 [続行] を選択します。

  5. ご利用の認証資格情報を入力します。 アカウント キーは現在サポートされている認証の種類です。 [接続のテスト] を選択して、ご利用の資格情報が正しいことを確認します。 [作成] を選択します。

    ADLS Gen2 ストレージ アクセス キーを使用してリンクされたサービスを作成するスクリーンショット。

重要

  • 上記で作成した Azure Data Lake Storage Gen2 への Linked Service がマネージド プライベート エンドポイント (dfs URI を使用) を使用する場合、内部の fsspec/adlfs コードが BlobServiceClient インターフェイスを使用して接続できるように、Azure Blob Storage オプション (BLOB URI を使用) を使用した別のセカンダリ マネージド プライベート エンドポイントを作成する必要があります。
  • セカンダリ マネージド プライベート エンドポイントが正しく構成されていない場合、ServiceRequestError: Cannot connect to host [storageaccountname].blob.core.windows.net:443 ssl:True [Name or service not known] のようなエラー メッセージが表示されます

BLOB エンドポイントを使用して ADLS Gen2 ストレージへのマネージド プライベート エンドポイントを作成するスクリーンショット。

ストレージ アカウントの名前とキーを使用してデータの読み取り/書き込みを行う

FSSPEC は、ストレージ アカウントの名前とキーを直接指定して、ADLS データの読み取り/書き込みを行うことができます。

  1. Synapse Studio で、 [データ]>[リンク]>[Azure Data Lake Storage Gen2] を開き ます。 データを既定のストレージ アカウントにアップロードします。

  2. 次のコードを実行します。

    Note

    このスクリプトを実行する前に、ファイルの URL、ADLS Gen2 ストレージ名およびキーを更新してください。

    # To read data
    import fsspec
    import pandas
    
    adls_account_name = '' #Provide exact ADLS account name
    adls_account_key = '' #Provide exact ADLS account key
    
    fsspec_handle = fsspec.open('abfs[s]://<container>/<path-to-file>', account_name=adls_account_name, account_key=adls_account_key)
    
    with fsspec_handle.open() as f:
        df = pandas.read_csv(f)
    
    # To write data
    import fsspec
    import pandas
    
    adls_account_name = '' #Provide exact ADLS account name 
    adls_account_key = '' #Provide exact ADLS account key 
    
    data = pandas.DataFrame({'Name':['Tom', 'nick', 'krish', 'jack'], 'Age':[20, 21, 19, 18]})
    
    fsspec_handle = fsspec.open('abfs[s]://<container>/<path-to-file>', account_name=adls_account_name, account_key=adls_account_key, mode="wt")
    
    with fsspec_handle.open() as f:
     data.to_csv(f)
    

リンクされたサービスを使用したデータの読み取り/書き込み

FSSPEC は、リンクされたサービス名を指定して、ADLS データの読み取り/書き込みを行うことができます。

  1. Synapse Studio で、 [データ]>[リンク]>[Azure Data Lake Storage Gen2] を開き ます。 データを既定のストレージ アカウントにアップロードします。

  2. 次のコードを実行します。

    Note

    このスクリプトを実行する前に、ファイルの URL、リンクされたサービス名、ADLS Gen2 のストレージ名を更新してください。

    # To read data
    import fsspec
    import pandas
    
    linked_service_name = '' #Provide exact Linked Service Name
    
    fsspec_handle = fsspec.open('abfs[s]://<container>/<path-to-file>', storage_options={'linked_service': linked_service_name})
    
    with fsspec_handle.open() as f:
        df = pandas.read_csv(f)
    
    # To write data
    import fsspec
    import pandas
    
    linked_service_name = '' #Provide exact Linked Service Name
    
    data = pandas.DataFrame({'Name':['Tom', 'nick', 'krish', 'jack'], 'Age':[20, 21, 19, 18]})
    
    fsspec_handle = fsspec.open('abfs[s]://<container>/<path-to-file>', storage_options={'linked_service': linked_service_name}, mode="wt") 
    
    with fsspec_handle.open() as f:
        data.to_csv(f) 
    

Synapse ワークスペースのローカル ファイル システムから既定の ADLS ストレージ アカウントにファイルをアップロードします。

FSSPEC は、ローカル ファイル システムから Synapse ワークスペースの既定の ADLS ストレージ アカウントにファイルをアップロードできます。

次のコードを実行します。

Note

このスクリプトのファイル URL を更新してから実行してください。

# Import libraries
import fsspec
import os

# Set variables
local_file_name = "<local_file_name>"
ADLS_Store_Path = "abfs[s]://<filesystemname>@<account name>.dfs.windows.core.net/"+local_file_name

# Generate local file for testing 
with open(local_file_name, mode='w') as f:
    for i in range(1000):
        f.write("Testing local file functionality\n")
print("Created: " + local_file_name)

# Upload local file to ADLS 
fs = fsspec.filesystem('abfs[s]')
fs.upload(local_file_name, ADLS_Store_Path)

次のステップ