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 をサポートします。専用アクセス・モード (旧シングル・ユーザー・アクセス・モード) およびDatabricks Runtime 14.3 以降で構成されたコンピュートでは、Scala Unity CatalogScalaは から発生するサブプロセス (Scala コマンド など) を除き、 ボリュームおよびワークスペース・ファイルの FUSE"cat /Volumes/path/to/file".!!
をサポートします。
Spark およびその他の JVM プロセスは、Unity Catalog をサポートするリーダーとライターを使用してのみ、Unity Catalog ボリュームまたはワークスペース ファイルにアクセスできます。 たとえば、JAR SparkPySpark構成で ファイルを依存関係として指定したり、カスタムデータソース 使用することはできません。ボリュームまたはワークスペース ファイル内のファイルにアクセスする必要があるライブラリからの JVM ワークロードがある場合は、 Python コマンドや %sh mv.
などのシェル コマンドを使用して、ファイルをコンピュート ローカル ストレージにコピーします。 JVM を使用する %fs
や dbutils.fs
は使用しないでください。 クラスターの開始中にファイルが存在する必要がある場合は、最初にinitスクリプトを使用してファイルを移動します。 「initスクリプトとは」を参照してください。
データにアクセスするためにURIスキームを提供する必要がありますか?
Databricks のデータ アクセス パスは、次のいずれかの標準に従います。
-
URI スタイルのパス には、URI スキームが含まれます。 Databricks ネイティブのデータ アクセス ソリューションの場合、URI スキームはほとんどのユース ケースで省略可能です。 クラウド・オブジェクト・ストレージ内のデータに直接アクセスする場合は、ストレージ・タイプに適した URI スキームを指定する必要があります。
-
POSIX スタイルのパス は、ドライバーのルート (
/
) を基準にしたデータアクセスを提供します。 POSIX スタイルのパスはスキームを必要としません。 Unity Catalog ボリュームまたは DBFS マウントを使用して、クラウド オブジェクト ストレージ内のデータへの POSIX スタイルのアクセスを提供できます。 多くの ML フレームワークやその他の OSS Python モジュールには FUSE が必要であり、POSIX スタイルのパスのみを使用できます。
Unity Catalog ボリューム内のファイルを操作する
Databricks では、Unity Catalog ボリュームを使用して、クラウド オブジェクト ストレージに格納されている表形式以外のデータ ファイルへのアクセスを構成することをお勧めします。 Unity Catalogボリュームとはを参照してください。
ツール | 例 |
---|---|
Apache Spark |
|
Spark SQL と Databricks SQL |
|
Databricks ファイルシステムユーティリティ |
|
Databricks CLI |
|
Databricks REST API |
|
Bash シェルコマンド |
|
ライブラリのインストール |
|
Pandas |
|
OSSのPythonの |
|
Databricks CLI を使用する場合は、 dbfs:/
スキームが必要です。
ボリュームの制限
ボリュームには次の制限があります。
-
直接追加または非シーケンシャル (ランダム) 書き込み (Zip ファイルや Excel ファイルの書き込みなど) はサポートされていません。 直接追加またはランダム書き込みワークロードの場合は、最初にローカル ディスクで操作を実行してから、結果を Unity Catalog ボリュームにコピーします。 例えば:
Python# 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
を使用します。Bash$ 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 SQL と Databricks SQL |
|
Databricks ファイルシステムユーティリティ |
|
Databricks CLI |
|
Databricks REST API |
|
Bash シェルコマンド |
|
ライブラリのインストール |
|
Pandas |
|
OSSのPythonの |
|
file:/
スキーマは、 Databricks ユーティリティ、 Apache Spark、または SQLを使用する場合に必要です。
ワークスペースファイルの操作に関する制限事項については、 制限事項を参照してください。
削除されたワークスペース ファイルはどこに行きますか?
ワークスペース ファイルを削除すると、そのファイルはごみ箱に送られます。 UI を使用して、ごみ箱からファイルを回復または完全に削除できます。
オブジェクトの削除を参照してください。
クラウドオブジェクトストレージ内のファイルの操作
Databricks では、Unity Catalog ボリュームを使用して、クラウド オブジェクト ストレージ内のファイルへの安全なアクセスを構成することをお勧めします。 URI を使用してクラウド・オブジェクト・ストレージ内のデータに直接アクセスすることを選択した場合は、権限を構成する必要があります。 外部ロケーション、外部テーブル、および外部ボリュームの管理を参照してください。
次の例では、URI を使用してクラウド・オブジェクト・ストレージ内のデータにアクセスします。
ツール | 例 |
---|---|
Apache Spark |
|
Spark SQL と Databricks SQL |
|
Databricks ファイルシステムユーティリティ |
|
Databricks CLI | サポートされていない |
Databricks REST API | サポートされていない |
Bash シェルコマンド | サポートされていない |
ライブラリのインストール |
|
Pandas | サポートされていない |
OSSのPythonの | サポートされていない |
クラウドオブジェクトストレージは、クライアント側の暗号化が有効になっているAmazon S3マウントをサポートしていません。
DBFSマウントとDBFSルートでファイルを操作する
DBFS マウントは Unity Catalog を使用してセキュリティ保護できず、Databricks では推奨されなくなりました。 DBFSルートに格納されたデータには、ワークスペース内のすべてのユーザーがアクセスできます。Databricks 、機密性の高いコードや本番運用コード、データを DBFSルートに保存しないことをお勧めします。 DBFS とはを参照してください。
ツール | 例 |
---|---|
Apache Spark |
|
Spark SQL と Databricks SQL |
|
Databricks ファイルシステムユーティリティ |
|
Databricks CLI |
|
Databricks REST API |
|
Bash シェルコマンド |
|
ライブラリのインストール |
|
Pandas |
|
OSSのPythonの |
|
Databricks CLI を使用する場合は、 dbfs:/
スキームが必要です。
ドライバーノードにアタッチされたエフェメラルストレージ内のファイルの操作
ドライバーノードにアタッチされたエフェメラルストレージは、組み込みPOSIXベースのパスアクセスを備えたブロックストレージです。 この場所に格納されているデータは、クラスターが終了または再起動すると消えます。
ツール | 例 |
---|---|
Apache Spark | サポートされていない |
Spark SQL と Databricks SQL | サポートされていない |
Databricks ファイルシステムユーティリティ |
|
Databricks CLI | サポートされていない |
Databricks REST API | サポートされていない |
Bash シェルコマンド |
|
ライブラリのインストール | サポートされていない |
Pandas |
|
OSSのPythonの |
|
Databricks ユーティリティを使用する場合は、 file:/
スキーマが必要です。
エフェメラルストレージからボリュームへのデータの移動
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>
追加のリソース
ローカル ファイルのアップロードまたはインターネット ファイルの Databricksへのダウンロードに関する情報については、「Databricksへのファイルのアップロード」を参照してください。