Databricks上のファイルを操作する

Databricks 、次の場所にあるファイルを操作するための複数のユーティリティとAPIsあります。

  • Unity Catalogボリューム

  • ワークスペースファイル

  • クラウドオブジェクトストレージ

  • DBFS マウントと DBFS ルート

  • クラスターのドライバーノードに接続された一時ストレージ

この記事では、次のツールでこれらの場所にあるファイルを操作する例を示します。

  • Apache Spark

  • Spark SQL と Databricks SQL

  • Databricks ファイル システム ユーティリティ ( dbutils.fsまたは%fs )

  • Databricks CLI

  • Databricks REST API

  • Bash シェル コマンド ( %sh )

  • ノートブック スコープのライブラリは次を使用してインストールされます %pip

  • pandas

  • OSS Python ファイル管理および処理ユーティリティ

重要

FUSE データ アクセスを必要とするファイル操作では、URI を使用してクラウド オブジェクト ストレージに直接アクセスすることはできません。 Databricks では、Unity Catalog ボリュームを使用して FUSE のこれらの場所へのアクセスを構成することをお勧めします。

Scala では、シングル ユーザー アクセス モードで構成されたコンピュート上の Unity Catalog ボリュームまたはワークスペース ファイル、または Unity Catalog を使用しないクラスターの FUSE はサポートされていません。 Scala では、Unity Catalog と共有アクセス モードで構成されたコンピュート上の Unity Catalog ボリュームとワークスペース ファイルの FUSE がサポートされています。

データにアクセスするためにURIスキームを提供する必要がありますか?

Databricks のデータ アクセス パスは、次のいずれかの標準に従います。

  • URI スタイルのパス には、URI スキームが含まれます。 Databricks ネイティブのデータ アクセス ソリューションの場合、ほとんどのユース ケースでは URI スキームはオプションです。 クラウド オブジェクト ストレージのデータに直接アクセスする場合は、ストレージ タイプに応じた正しい URI スキームを指定する必要があります。

    URI パスの図
  • POSIX スタイルのパスは 、ドライバー ルート (/) を基準としたデータ アクセスを提供します。 POSIX スタイルのパスは、スキームを必要としません。 Unity CatalogボリュームまたはDBFSマウントを使用して、クラウドオブジェクトストレージ内のデータへのPOSIXスタイルのアクセスを提供できます。多くの機械学習フレームワークやその他の OSS Python モジュールは FUSE を必要とし、POSIX スタイルのパスしか使用できません。

    POSIX パスの図

Unity Catalogボリューム内のファイルを操作する

Databricks 、クラウド オブジェクト ストレージに保存されている非表形式のデータ ファイルへのアクセスを構成するには、 Unity Catalogボリュームを使用することをお勧めします。 Unity Catalogボリュームとは何ですか?」を参照してください。

道具

Apache Spark

spark.read.format("json").load("/Volumes/my_catalog/my_schema/my_volume/data.json").show()

Spark SQL と Databricks SQL

SELECT * FROM csv.`/Volumes/my_catalog/my_schema/my_volume/data.csv`; LIST '/Volumes/my_catalog/my_schema/my_volume/';

Databricks ファイルシステムユーティリティ

dbutils.fs.ls("/Volumes/my_catalog/my_schema/my_volume/") %fs ls /Volumes/my_catalog/my_schema/my_volume/

Databricks CLI

databricks fs cp /path/to/local/file dbfs:/Volumes/my_catalog/my_schema/my_volume/

Databricks REST API

POST https://<databricks-instance>/api/2.1/jobs/create {"name": "A multitask job", "tasks": [{..."libraries": [{"jar": "/Volumes/dev/environment/libraries/logging/Logging.jar"}],},...]}

Bash シェルコマンド

%sh curl http://<address>/text.zip -o /Volumes/my_catalog/my_schema/my_volume/tmp/text.zip

ライブラリのインストール

%pip install /Volumes/my_catalog/my_schema/my_volume/my_library.whl

Pandas

df = pd.read_csv('/Volumes/my_catalog/my_schema/my_volume/data.csv')

OSS Python

os.listdir('/Volumes/my_catalog/my_schema/my_volume/path/to/directory')

Databricks CLI を使用する場合は、 dbfs:/スキームが必要です。

ボリュームの制限

ボリュームには、次の制限があります。

  • Zip ファイルや Excel ファイルの書き込みなど、直接追加または非順次 (ランダム) 書き込みはサポートされていません。 直接追加またはランダム書き込みワークロードの場合は、最初にローカル ディスク上で操作を実行し、次に結果をUnity Catalogボリュームにコピーします。 例えば:

    # python
    import xlsxwriter
    from shutil import copyfile
    
    workbook = xlsxwriter.Workbook('/local_disk0/tmp/excel.xlsx')
    worksheet = workbook.add_worksheet()
    worksheet.write(0, 0, "Key")
    worksheet.write(0, 1, "Value")
    workbook.close()
    
    copyfile('/local_disk0/tmp/excel.xlsx', '/Volumes/my_catalog/my_schema/my_volume/excel.xlsx')
    
  • スパース ファイルはサポートされていません。 スパース ファイルをコピーするには、 cp --sparse=neverを使用します。

    $ cp sparse.file /Volumes/my_catalog/my_schema/my_volume/sparse.file
    error writing '/dbfs/sparse.file': Operation not supported
    $ cp --sparse=never sparse.file /Volumes/my_catalog/my_schema/my_volume/sparse.file
    

ワークスペース ファイルの操作

Databricksワークスペース ファイルは、ノートブックではないワークスペース内のファイルです。 ワークスペース ファイルを使用すると、ノートブックやその他のワークスペース アセットと一緒に保存されたデータやその他のファイルを保存したり、アクセスしたりできます。 ワークスペース ファイルにはサイズ制限があるため、Databricks では、主に開発とテスト用に小さなデータ ファイルのみをここに保存することをお勧めします。

道具

Apache Spark

spark.read.format("json").load("file:/Workspace/Users/<user-folder>/data.json").show()

Spark SQL と Databricks SQL

SELECT * FROM json.`file:/Workspace/Users/<user-folder>/file.json`;

Databricks ファイルシステムユーティリティ

dbutils.fs.ls("file:/Workspace/Users/<user-folder>/") %fs ls file:/Workspace/Users/<user-folder>/

Databricks CLI

databricks workspace list

Databricks REST API

POST https://<databricks-instance>/api/2.0/workspace/delete {"path": "/Workspace/Shared/code.py", "recursive": "false"}

Bash シェルコマンド

%sh curl http://<address>/text.zip -o /Workspace/Users/<user-folder>/text.zip

ライブラリのインストール

%pip install /Workspace/Users/<user-folder>/my_library.whl

Pandas

df = pd.read_csv('/Workspace/Users/<user-folder>/data.csv')

OSS Python

os.listdir('/Workspace/Users/<user-folder>/path/to/directory')

file:/スキーマは、Databricks ユーティリティ、Apache Spark、または SQL を操作するときに必要です。

ワークスペースファイルの制限事項

ワークスペース ファイルには次の制限があります。

  • ワークスペースのファイル サイズは 500MB に制限されています。 この制限を超えるファイルをダウンロードまたは作成しようとする操作は失敗します。

  • ワークフローがリモート Git リポジトリにあるソース コードを使用している場合、現在のディレクトリに書き込んだり、相対パスを使用して書き込んだりすることはできません。 他の場所オプションにデータを書き込みます。

  • ワークスペース ファイルに保存するときに git コマンドを使用することはできません。 .gitディレクトリの作成は、ワークスペースファイルでは許可されていません。

  • サーバレス コンピュートからのワークスペース ファイル操作のサポートは限定的です。

  • エグゼキューターはワークスペース ファイルに書き込むことができません。

  • シンボリックリンクはサポートされていません。

  • Databricks Runtime 14.2 以下の 共有アクセス モード のクラスターでは 、ユーザー定義関数 (UDF) からワークスペース ファイルにアクセスすることはできません。

削除されたワークスペースファイルはどこに行くのでしょうか?

ワークスペース ファイルを削除すると、そのファイルはゴミ箱に送信されます。 UI を使用して、ごみ箱からファイルを回復または完全に削除できます。

「オブジェクトの削除」を参照してください。

クラウドオブジェクトストレージ内のファイルの操作

Databricksでは、 Unity Catalogボリュームを使用して、クラウド オブジェクト ストレージ内のファイルへの安全なアクセスを構成することをお勧めします。 URI を使用してクラウド オブジェクト ストレージ内のデータに直接アクセスする場合は、アクセス許可を構成する必要があります。 「外部ロケーション、外部テーブル、外部ボリュームの管理」を参照してください。

次の例では、URI を使用してクラウドオブジェクトストレージ内のデータにアクセスします。

道具

Apache Spark

spark.read.format("json").load("gs://<bucket>/path/file.json").show()

Spark SQL と Databricks SQL

SELECT * FROM csv.`gs://<bucket>/path/file.json`; LIST 'gs://<bucket>/path';

Databricks ファイルシステムユーティリティ

dbutils.fs.ls("gs://<bucket>/path/") %fs ls gs://<bucket>/path/

Databricks CLI

サポートされていない

Databricks REST API

サポートされていない

Bash シェルコマンド

サポートされていない

ライブラリのインストール

%pip install gs://bucket-name/path/to/library.whl

Pandas

サポートされていない

OSS Python

サポートされていない

クラウドオブジェクトストレージは認証情報のパススルーをサポートしていません。

DBFS マウントおよび DBFSルート内のファイルを操作する

DBFS マウントは Unity Catalog を使用してセキュリティ保護することはできず、Databricks では推奨されなくなりました。 DBFSルートに保存されたデータは、ワークスペース内のすべてのユーザーがアクセスできます。 Databricks 、機密性の高いコードやデータを DBFS ルートに保存しないことを推奨しています。 「DBFS とは何ですか?」を参照してください。

道具

Apache Spark

spark.read.format("json").load("/mnt/path/to/data.json").show()

Spark SQL と Databricks SQL

SELECT * FROM json.`/mnt/path/to/data.json`;

Databricks ファイルシステムユーティリティ

dbutils.fs.ls("/mnt/path") %fs ls /mnt/path

Databricks CLI

databricks fs cp dbfs:/mnt/path/to/remote/file /path/to/local/file

Databricks REST API

POST https://<host>/api/2.0/dbfs/delete --data '{ "path": "/tmp/HelloWorld.txt" }'

Bash シェルコマンド

%sh curl http://<address>/text.zip > /dbfs/mnt/tmp/text.zip

ライブラリのインストール

%pip install /dbfs/mnt/path/to/my_library.whl

Pandas

df = pd.read_csv('/dbfs/mnt/path/to/data.csv')

OSS Python

os.listdir('/dbfs/mnt/path/to/directory')

Databricks CLI を使用する場合は、 dbfs:/スキームが必要です。

ドライバーノードに接続されたエフェメラルストレージ内のファイルを操作する

ドライバーノードに接続された一時ストレージは、POSIX ベースのパス アクセスを備えたブロック ストレージです。 この場所に保存されているデータは、クラスターが終了または再起動すると消えます。

道具

Apache Spark

サポートされていない

Spark SQL と Databricks SQL

サポートされていない

Databricks ファイルシステムユーティリティ

dbutils.fs.ls("file:/path") %fs ls file:/path

Databricks CLI

サポートされていない

Databricks REST API

サポートされていない

Bash シェルコマンド

%sh curl http://<address>/text.zip > /tmp/text.zip

ライブラリのインストール

サポートされていない

Pandas

df = pd.read_csv('/path/to/data.csv')

OSS Python

os.listdir('/path/to/directory')

file:/ スキーマは、Databricks ユーティリティを使用する場合に必要です。

エフェメラルストレージからボリュームへのデータの移動

Apache Spark を使用して、一時ストレージにダウンロードまたは保存されたデータにアクセスする必要がある場合があります。 一時ストレージはドライバーに接続されており、Spark は分散処理エンジンであるため、すべての操作がここでデータに直接アクセスできるわけではありません。 ドライバーファイルシステムからUnity Catalogボリュームにデータを移動する必要があるとします。 その場合、次の例のように、 マジック コマンドまたはDatabricks ユーティリティを使用してファイルをコピーできます。

dbutils.fs.cp ("file:/<path>", "/Volumes/<catalog>/<schema>/<volume>/<path>")
%sh cp /<path> /Volumes/<catalog>/<schema>/<volume>/<path>
%fs cp file:/<path> /Volumes/<catalog>/<schema>/<volume>/<path>