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スキームを指定する必要があります。
POSIX スタイルのパスは 、ドライバー ルート (
/
) を基準としたデータ アクセスを提供します。 POSIX スタイルのパスは、スキームを必要としません。 Unity CatalogボリュームまたはDBFSマウントを使用して、クラウドオブジェクトストレージ内のデータへのPOSIXスタイルのアクセスを提供できます。多くの機械学習フレームワークやその他の OSS Python モジュールは FUSE を必要とし、POSIX スタイルのパスしか使用できません。
Unity Catalogボリューム内のファイルを操作する
Databricks では、Unity Catalog ボリュームを使用して、クラウド オブジェクト ストレージに格納されている表形式以外のデータ ファイルへのアクセスを構成することをお勧めします。 「ボリュームの作成と操作」を参照してください。
道具 |
例 |
---|---|
Apache Spark |
|
Spark SQL と Databricks SQL |
|
Databricks ファイルシステムユーティリティ |
|
Databricks CLI |
|
Databricks REST API |
|
Bash シェルコマンド |
|
ライブラリのインストール |
|
Pandas |
|
OSS Python |
|
注
dbfs:/
スキーマは、Databricks CLI を操作するときに必要です。
ボリュームの制限
ボリュームには、次の制限があります。
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 SQL と Databricks SQL |
|
Databricks ファイルシステムユーティリティ |
|
Databricks CLI |
|
Databricks REST API |
|
Bash シェルコマンド |
|
ライブラリのインストール |
|
Pandas |
|
OSS Python |
|
注
file:/
スキーマは、Databricks ユーティリティ、Apache Spark、または SQL を操作するときに必要です。
ワークスペースファイルの制限事項
ワークスペース ファイルには次の制限があります。
ワークスペースのファイル サイズは 500MB に制限されています。 この制限を超えるファイルをダウンロードまたは作成しようとする操作は失敗します。
ワークフローがリモート Git リポジトリにあるソース コードを使用している場合、現在のディレクトリに書き込んだり、相対パスを使用して書き込んだりすることはできません。 他の場所オプションにデータを書き込みます。
ワークスペース ファイルに保存するときに
git
コマンドを使用することはできません。.git
ディレクトリの作成は、ワークスペースファイルでは許可されていません。サーバレス コンピュートからのワークスペース ファイル操作のサポートは限定的です。
エグゼキューターはワークスペース ファイルに書き込むことができません。
シンボリックリンクはサポートされていません。
共有アクセス モード では、クラスター上の ユーザー定義関数 (UDF) からワークスペース ファイルにアクセスできません。
削除されたワークスペースファイルはどこに行くのでしょうか?
ワークスペース ファイルを削除すると、そのファイルはごみ箱に送られます。 UI を使用して、ごみ箱からファイルを復元したり、完全に削除したりできます。
「オブジェクトの削除」を参照してください。
クラウドオブジェクトストレージ内のファイルの操作
Databricks では、Unity Catalog ボリュームを使用して、クラウド オブジェクト ストレージ内のファイルへのセキュリティで保護されたアクセスを構成することをお勧めします。 URI を使用してクラウド・オブジェクト・ストレージ内のデータに直接アクセスする場合は、権限を構成する必要があります。 「外部ロケーション、外部テーブル、および外部ボリュームの管理」を参照してください。
次の例では、URI を使用してクラウドオブジェクトストレージ内のデータにアクセスします。
道具 |
例 |
---|---|
Apache Spark |
|
Spark SQL と Databricks SQL |
|
Databricks ファイルシステムユーティリティ |
|
Databricks CLI |
サポートされていない |
Databricks REST API |
サポートされていない |
Bash シェルコマンド |
サポートされていない |
ライブラリのインストール |
|
Pandas |
サポートされていない |
OSS Python |
サポートされていない |
注
クラウド オブジェクト ストレージは認証情報のパススルーをサポートしていません。
DBFS マウントおよび DBFSルート内のファイルを操作する
DBFS マウントは、 Unity Catalog を使用してセキュリティ保護可能ではなく、Databricks では推奨されなくなりました。 DBFSルートに格納されているデータには、ワークスペース内のすべてのユーザーがアクセスできます。 Databricks では、機密性の高いコードや本番運用コードやデータを DBFSルートに格納しないことをお勧めします。 「 Databricks ファイル システム (DBFS) とは」を参照してください。
道具 |
例 |
---|---|
Apache Spark |
|
Spark SQL と Databricks SQL |
|
Databricks ファイルシステムユーティリティ |
|
Databricks CLI |
|
Databricks REST API |
|
Bash シェルコマンド |
|
ライブラリのインストール |
|
Pandas |
|
OSS Python |
|
注
dbfs:/
スキーマは、Databricks CLI を操作するときに必要です。
ドライバーノードに接続されたエフェメラルストレージ内のファイルを操作する
ドライバー・ノードにアタッチされたエファーマル・ストレージは、ネイティブの POSIX ベースのパス・アクセスを持つブロック・ストレージです。 この場所に保存されているデータは、クラスターが終了または再起動すると失われます。
道具 |
例 |
---|---|
Apache Spark |
サポートされていない |
Spark SQL と Databricks SQL |
サポートされていない |
Databricks ファイルシステムユーティリティ |
|
Databricks CLI |
サポートされていない |
Databricks REST API |
サポートされていない |
Bash シェルコマンド |
|
ライブラリのインストール |
サポートされていない |
Pandas |
|
OSS Python |
|
注
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>