Azure Databricks でファイルを操作する
Azure Databricks には、次の場所にあるファイルを操作するための複数のユーティリティと API があります。
- Unity のカタログボリューム
- ワークスペース ファイル
- クラウド オブジェクト ストレージ
- DBFS マウントと DBFS ルート
- クラスターのドライバー ノードに接続されているエフェメラル ストレージ
この記事では、次のツールのこれらの場所にあるファイルを操作する例を示します。
- Apache Spark
- Spark SQL と Databricks SQL
- Databricks ファイル システム ユーティリティ (
dbutils.fs
または%fs
) - Databricks CLI(コマンドラインインターフェース)
- Databricks REST API
- Bash シェル コマンド (
%sh
) %pip
を使用したノートブック スコープのライブラリのインストール- パンダ
- OSS Python ファイル管理および処理ユーティリティ
重要
FUSE データ アクセスを必要とするファイル操作は、URI を使用してクラウド オブジェクト ストレージに直接アクセスすることはできません。 Databricks では、Unity カタログ ボリュームを使用して FUSE のこれらの場所へのアクセスを構成することをお勧めします。
Scala では、Unity カタログと共有アクセス モードで構成されたコンピューティング上の Unity カタログ ボリュームとワークスペース ファイルに対する FUSE がサポートされます。 シングル ユーザー アクセス モードと Databricks Runtime 14.3 以降で構成されたコンピューティングでは、Scala では、Scala コマンド "cat /Volumes/path/to/file".!!
など、Scala から生成されたサブプロセスを除き、Unity カタログ ボリュームとワークスペース ファイル用の FUSE がサポートされます。
Spark やその他の JVM プロセスは、Unity カタログをサポートするリーダーとライターを使用して、Unity カタログのボリュームまたはワークスペース ファイルにのみアクセスできます。 たとえば、Spark 構成で依存関係として JAR ファイルを指定したり、PySpark カスタム データ ソースを使用したりすることはできません。 ボリュームまたはワークスペース ファイル内のファイルにアクセスする必要があるライブラリの JVM ワークロードがある場合は、Python またはシェル コマンド (%sh mv.
など) を使用して、ファイルをコンピューティング ローカル ストレージにコピーします。 JVM を使用する %fs
や dbutils.fs
は使用しないでください。 クラスターの開始時にファイルが存在する必要がある場合は、最初に init スクリプトを使用してファイルを移動します。 「init スクリプトとは」を参照してください。
データにアクセスするための URI スキームを指定する必要がありますか?
Azure Databricks のデータ アクセス パスは、次のいずれかの標準に従います。
URI スタイルのパス URI スキームを含めます。 Databricks ネイティブ データ アクセス ソリューションの場合、ほとんどのユース ケースでは URI スキームは省略可能です。 クラウド オブジェクト ストレージ内のデータに直接アクセスする場合は、ストレージの種類に対して適切な URI スキームを指定する必要があります。
POSIX スタイルのパス、ドライバー ルート (
/
) に対するデータ アクセスを提供します。 POSIX スタイルのパスにはスキームは必要ありません。 Unity カタログ ボリュームまたは DBFS マウントを使用して、クラウド オブジェクト ストレージ内のデータへの POSIX スタイルのアクセスを提供できます。 多くの ML フレームワークやその他の OSS Python モジュールでは FUSE が必要であり、POSIX スタイルのパスのみを使用できます。POSIX パスの
Unity カタログ ボリューム内のファイルを操作する
Databricks では、Unity カタログ ボリュームを使用して、クラウド オブジェクト ストレージに格納されている表形式以外のデータ ファイルへのアクセスを構成することをお勧めします。 「Unity カタログのボリュームとは」について参照してください。
ツール | 例 |
---|---|
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 |
パンダ | df = pd.read_csv('/Volumes/my_catalog/my_schema/my_volume/data.csv') |
オープンソースソフトウェア Python | os.listdir('/Volumes/my_catalog/my_schema/my_volume/path/to/directory') |
手記
Databricks CLI を使用する場合は、dbfs:/
スキームが必要です。
ボリューム制限
ボリュームには、次の制限があります。
Zip ファイルや Excel ファイルの書き込みなど、直接追加または非連続 (ランダム) の書き込みはサポートされていません。 直接追加ワークロードまたはランダム書き込みワークロードの場合は、まずローカル ディスクで操作を実行してから、結果を Unity カタログ ボリュームにコピーします。 例えば:
# 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 |
パンダ | df = pd.read_csv('/Workspace/Users/<user-folder>/data.csv') |
オープンソースソフトウェア Python | os.listdir('/Workspace/Users/<user-folder>/path/to/directory') |
手記
Databricks Utilities、Apache Spark、または SQL を使用する場合は、file:/
スキーマが必要です。
ワークスペース ファイルの操作に関する制限事項については、「制限事項を参照してください。
削除されたワークスペース ファイルはどこに移動しますか?
ワークスペース ファイルを削除すると、ごみ箱に送信されます。 UI を使用して、ごみ箱からファイルを回復または完全に削除できます。
「オブジェクトを削除する」を参照してください。
クラウド オブジェクト ストレージ内のファイルを操作する
Databricks では、Unity カタログ ボリュームを使用して、クラウド オブジェクト ストレージ内のファイルへの安全なアクセスを構成することをお勧めします。 URI を使用してクラウド オブジェクト ストレージ内のデータに直接アクセスする場合は、アクセス許可を構成する必要があります。 「外部の場所、外部テーブル、および外部ボリュームの管理を参照してください。
次の例では、URI を使用してクラウド オブジェクト ストレージ内のデータにアクセスします。
ツール | 例 |
---|---|
Apache Spark | spark.read.format("json").load("abfss://container-name@storage-account-name.dfs.core.windows.net/path/file.json").show() |
Spark SQL と Databricks SQL | SELECT * FROM csv.`abfss://container-name@storage-account-name.dfs.core.windows.net/path/file.json`; LIST 'abfss://container-name@storage-account-name.dfs.core.windows.net/path'; |
Databricks ファイル システム ユーティリティ | dbutils.fs.ls("abfss://container-name@storage-account-name.dfs.core.windows.net/path/") %fs ls abfss://container-name@storage-account-name.dfs.core.windows.net/path/ |
Databricksのコマンドラインインターフェース (CLI) | サポートされていません |
Databricks REST API | サポートされていません |
Bash シェル コマンド | サポートされていません |
ライブラリのインストール | %pip install abfss://container-name@storage-account-name.dfs.core.windows.net/path/to/library.whl |
パンダ | サポートされていません |
オープンソースソフトウェア Python | サポートされていません |
手記
DBFS マウントと DBFS ルート内のファイルを操作する
DBFS マウントは Unity カタログを使用してセキュリティ保護することはできず、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 |
パンダ | 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 |
ライブラリのインストール | サポートされていません |
パンダ | df = pd.read_csv('/path/to/data.csv') |
OSS Python | os.listdir('/path/to/directory') |
手記
Databricks Utilities を使用する場合は、file:/
スキーマが必要です。
エフェメラル ストレージからボリュームにデータを移動する
Apache Spark を使用して、一時ストレージにダウンロードまたは保存されたデータにアクセスできます。 エフェメラル ストレージはドライバーに接続され、Spark は分散処理エンジンであるため、すべての操作がここでデータに直接アクセスできるわけではありません。 ドライバー ファイルシステムから Unity カタログ ボリュームにデータを移動する必要があるとします。 その場合は、次の例のように、マジック コマンド または 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>
その他のリソース
ローカル ファイルのアップロードまたは Azure Databricks へのインターネット ファイルのダウンロードの詳細については、「Azure Databricksにファイルをアップロードする」を参照してください。