Databricksファイルシステム(DBFS)

[Databricks File System \(DBFS\) \| Databricks on AWS](https://docs.databricks.com/data/databricks-file-system.html) [2022/1/23時点]の翻訳です。

> [Databricksクイックスタートガイド](https://qiita.com/taka_yayoi/items/125231c126a602693610)のコンテンツです。

:::note warn
本書は抄訳であり内容の正確性を保証するものではありません。正確な内容に関しては原文を参照ください。
:::

Databricksファイルシステム(DBFS)は、Databricksワークスペースにマウントされる分散ファイルシステムであり、Databricksクラスターで利用することができます。DBFSはスケーラブルなオブジェクトストレージの抽象化レイヤーであり、以下のメリットを提供します。

- クレディンシャルなしにデータにシームレスにアクセスできるようにストレージをマウントすることができます。
- ストレージURLではなく、ディレクトリとファイルの文法を用いてオブジェクトストレージを操作することができます。
- オブジェクトストレージにファイルを永続化するので、クラスターを停止してもデータを失うことはありません。

# DBFSのアクセス権に関する重要な情報

[DBFSルート](#dbfsルート)を除き、DBFSにマウントされたオブジェクトストレージのオブジェクトに対してすべてのユーザーが読み書きのアクセス権を持ちます。

しかし、インスタンスプロファイルを用いてマウントが作成されている場合、IAMロールが許可するユーザーのみがアクセス権を持ち、当該インスタンスプロファイルを使用するように設定されたクラスターのみがアクセスすることができます。このため、インスタンスプロファイルを用いて作成されたマウントにはDBFS CLIでアクセスすることはできません。

# DBFSルート

DBFSのデフォルトストレージの場所を*DBFSルート*と呼びます。以下のDBFSルートのディレクトリにはいくつかの種類のデータが格納されます。

- `/FileStore`: インポートされたデータファイル、生成されたプロット、アップロードされたライブラリが格納されます。[特殊なDBFSルートのディレクトリ](#特殊なdbfsルートのディレクトリ)を参照ください。
- `/databricks-datasets`: パブリックなサンプルデータセットが格納されています。[特殊なDBFSルートのディレクトリ](#特殊なdbfsルートのディレクトリ)を参照ください。
- `/databricks-results`: クエリーの[完全な結果](https://qiita.com/taka_yayoi/items/dfb53f63aed2fbd344fc#%E5%85%A8%E3%81%A6%E3%81%AE%E7%B5%90%E6%9E%9C%E3%81%AE%E3%83%80%E3%82%A6%E3%83%B3%E3%83%AD%E3%83%BC%E3%83%89)をダウンロードする際に生成されるファイルが格納されます。
- `/databricks/init`: グローバル[initスクリプト](https://qiita.com/taka_yayoi/items/88cb46be00a175085f87)、クラスター指定initスクリプト(非推奨)が格納されます。
- `/user/hive/warehouse`: Hiveテーブルのデータとメタデータが格納されます。

新たに作成されたワークスペースにおいては、DBFSには以下のようなデフォルトフォルダが含まれています。
![](https://docs.databricks.com/_images/dbfs-root.png)

DBFSルートには、マウントポイントのメタデータ、クレデンシャル、そして特定のタイプのログを含むデータも格納されますが、これらは非表示となっており直接アクセスすることはできません。

## 推奨の設定と利用方法

Databriksのアカウント管理者は、[アカウントコンソール](https://docs.databricks.com/administration-guide/account-settings-e2/workspaces.html)あるいは[Account API 2\.0](https://docs.databricks.com/dev-tools/api/latest/account.html)を用いてワークスペースを作成する際に、DBFSルートストレージバケットをセットアップします。詳細は[Configure AWS storage](https://docs.databricks.com/administration-guide/account-api/aws-storage.html)を参照ください。

バケットとワークスペースを作成した後に行うことができる推奨設定が存在します。

- 問題の早期解決を行えるように、DBFSルートバケットの[S3オブジェクトレベルロギングを有効化](https://docs.aws.amazon.com/AmazonS3/latest/userguide/enable-cloudtrail-logging-for-s3.html)することをお勧めします。S3オブジェクトレベルロギングはAWSの利用量を増加させる場合があることに注意してください。
- DBFSマウントポイントに格納されていないデータを格納するために、一定の期間DBFSはDatabricksのアカウントのS3バケットを使用していました。お使いの環境のDatabricksワークスペースがこのS3バケットを使い続けている場合には、Databricksのサポートに連絡し、ご自身のアカウントのS3バケットにデータを移動することをお勧めします。

以下の利用法をお勧めしています。

- [マウントポイントのパス](#dbfsへのオブジェクトストレージへのマウント)(`/mnt`)に書き込まれるデータはDBFSルートの外になります。DBFSは書き込み可能ですが、DBFSルートではなくマウントされたオブジェクトストレージにデータを格納することをお勧めします。DBFSルートはプロダクションの顧客情報を格納することを目的とはしていません。

## 顧客管理キーによるDBFSルートのデータの暗号化(オプション)

[パブリックプレビュー](https://docs.databricks.com/release-notes/release-types.html)として利用できる[機能](https://qiita.com/taka_yayoi/items/a93cc81ed0c803401bb7)として、顧客管理キーを用いたDBFSルートのデータの暗号化が可能です。

## 特殊なDBFSルートのディレクトリ

以下の文書では、特殊なDBFSルートのディレクトリを説明しています。

- [DatabricksのFileStore](https://qiita.com/taka_yayoi/items/01d9b69d2f5283d27d96)
- [Databricksデータセット](https://qiita.com/taka_yayoi/items/dcf77d0b007fae774ce5)

# UIによるDBFSの参照

DBFSファイルブラウザを用いてDBFSの参照、検索が可能です。

:::note
**注意**
利用する前に、管理者がDBFSブラウザインタフェースを有効化する必要があります。[Manage the DBFS file browser](https://docs.databricks.com/administration-guide/workspace/dbfs-browser.html)を参照ください。
:::

1. サイドバーの![](https://docs.databricks.com/_images/data-icon.png)**Data**をクリックします。
1. ページの上部にある**DBFS**ボタンをクリックします。

ブラウザは階層上にDBFSオブジェクトを表示します。階層を展開するにはオブジェクトを選択します。DBFSオブジェクトを検索するには**Prefix search**を使用します。
![](https://docs.databricks.com/_images/browse.png)

また、[DBFS CLI](#databricks-cli)、[Databricksファイルシステムユーティリティ\(dbutils\.fs\)](#dbutils)、[Spark API](#spark-api)、[ローカルファイルAPI](#ローカルファイルapi)を用いてDBFSオブジェクトの一覧を取得することができます。[DBFSへのアクセス](#dbfsへのアクセス)を参照ください。

# DBFSへのオブジェクトストレージへのマウント

DBFSにオブジェクトストレージをマウントすることで、ローカルファイルシステムのようにオブジェクトストレージのオブジェクトにアクセスすることができるようになります。

:::note info
マウントポイントは明示的にアンマウントしない限り永続化します。
:::

AWS S3バケットのマウント、アンマウントの方法に関しては、[DBFSを通じたS3バケットへのアクセス](https://qiita.com/taka_yayoi/items/a26a1fb49c0e217ad10b#dbfs%E3%82%92%E9%80%9A%E3%81%98%E3%81%9Fs3%E3%83%90%E3%82%B1%E3%83%83%E3%83%88%E3%81%B8%E3%81%AE%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9)を参照ください。DBFSを通じてS3に書き込みを行う際の暗号化に関しては、[s3a://パスに対するKMS暗号化の設定](https://qiita.com/taka_yayoi/items/a26a1fb49c0e217ad10b#s3a%E3%83%91%E3%82%B9%E3%81%AB%E5%AF%BE%E3%81%99%E3%82%8Bkms%E6%9A%97%E5%8F%B7%E5%8C%96%E3%81%AE%E8%A8%AD%E5%AE%9A)を参照ください。

Azure Blob Storageコンテナ、Azure Data Lake Storageアカウントのマウント、アンマウントに関しては、[Mount Azure Blob storage containers to DBFS](https://docs.databricks.com/data/data-sources/azure/azure-storage.html#mount-azure-blob-storage-dbfs)、[Mount Azure Data Lake Storage Gen1 resource using a service principal and OAuth 2\.0](https://docs.databricks.com/data/data-sources/azure/azure-datalake.html#mount-azure-data-lake)、[Mount ADLS Gen2 storage](https://docs.databricks.com/data/data-sources/azure/adls-gen2/azure-datalake-gen2-sp-access.html#mount-storage)を参照ください。

:::note warn
**重要！**
ネストされたマウントは*サポートされていません*。例えば、以下の構造はサポートされていません。
- `/mnt/storage1`としてマウントされる`storage1`
- `/mnt/storage1/storage2`としてマウントされる`storage2`

それぞれのストレージオブジェクトに対して別のマウントを作成することをお勧めします。
- `/mnt/storage1`としてマウントされる`storage1`
- `/mnt/storage2`としてマウントされる`storage2`
:::

# DBFSへのアクセス

:::note
**重要！**
[DBFSルート](#dbfsルート)を除き、DBFSにマウントされたオブジェクトストレージのオブジェクトに対してすべてのユーザーが読み書きのアクセス権を持ちます。[DBFSのアクセス権に関する重要な情報](#dbfsのアクセス権に関する重要な情報)を参照ください。
:::

ファイルアップロードのインタフェースを用いてデータをDBFSにアップローできます。また、[DBFS CLI](#databricks-cli)、[DBFS API 2\.0](https://docs.databricks.com/dev-tools/api/latest/dbfs.html)、[Databricksファイルシステムユーティリティ\(dbutils\.fs\)](#dbutils)、[Spark API](#spark-api)、[ローカルファイルAPI](#ローカルファイルapi)を用いたアップロード、DBFSオブジェクトへのアクセスが可能です。

Databricksのクラスター上では、Databricksファイルシステムユーティリティ、Spark API、ローカルファイルAPIを用いてDBFSにアクセスすることができます。ローカルコンピューター上では、Databricks CLIあるいはDBFS APIを用いてDBFSオブジェクトにアクセスすることができます。

本セクションでは以下を説明します。

- [DBFSとローカルドライバーノードのパス](#dbfsとローカルドライバーノードのパス)
- [ファイルアップロードのインタフェース](#ファイルアップロードのインタフェース)
- [Databricks CLI](#databricks-cli)
- [`dbutils`](#dbutils)
- [DBFS API](#dbfs-api)
- [Spark API](#spark-api)
- [ローカルファイルAPI](#ローカルファイルapi)

## DBFSとローカルドライバーノードのパス

DBFS上のファイル、クラスターのローカルドライバーノードのファイルを操作することができます。`%fs`や`%sh`といった[マジックコマンド](https://qiita.com/taka_yayoi/items/dfb53f63aed2fbd344fc#%E6%B7%B7%E6%88%90%E8%A8%80%E8%AA%9E)を使ってファイルシステムにアクセスすることができます。また、[Databricksファイルシステムユーティリティ \(dbutils\.fs\)](https://qiita.com/taka_yayoi/items/3717623187859809515d#%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%83%A6%E3%83%BC%E3%83%86%E3%82%A3%E3%83%AA%E3%83%86%E3%82%A3dbutilsfs)を用いることもできます。

Databricksはクラウドに格納されているファイルへのローカルアクセスを提供するためにFUSEマウントを使用しています。FUSEマウントはセキュアかつ、バーチャルなファイルシステムです。

### DBFSのファイルへのアクセス

デフォルトblobストレージ(root)へのパスは`dbfs:/`となります。

`%fs`と`dbutils.fs`のデフォルトロケーションはrootとなります。このため、rootや外部バケットに対する読み書きは以下のように行います。

```bash:Bash
%fs <command> /<path>
```

```py:Python
dbutils.fs.<command> ("/<path>/")
```

`%sh`は、デフォルトではローカルファイルシステムから読み込みを行います。`%sh`でrootやroot配下のマウントパスにアクセスするには、パスの先頭に`/dbfs/`を追加します。典型的なユースケースは、TensorFlow、scikit-learnのようなシングルノード向けのライブラリで作業をしており、クラウドストレージに対して読み書きを行いたいというものになります。

```bash:Bash
%sh <command> /dbfs/<path>/
```

シングルノードのファイルシステムAPIを使用することもできます。

```py:Python
import os
os.<command>('/dbfs/tmp')
```

#### サンプル

```bash:Bash
# Default location for %fs is root
%fs ls /tmp/
%fs mkdirs /tmp/my_cloud_dir
%fs cp /tmp/test_dbfs.txt /tmp/file_b.txt
```

```py:Python
# Default location for dbutils.fs is root
dbutils.fs.ls ("/tmp/")
dbutils.fs.put("/tmp/my_new_file", "This is a file in cloud storage.")
```

```bash:Bash
# Default location for %sh is the local filesystem
%sh ls /dbfs/tmp/
```

```py:Python
# Default location for os commands is the local filesystem
import os
os.listdir('/dbfs/tmp')
```

### ローカルファイルシステムのファイルへのアクセス

`%fs`と`dbutils.fs`はデフォルトでroot(`dbfs:/`)から読み込みを行います。ローカルファイルシステムから読み込みを行うためには、`file:/`を使う必要があります。

```bash:Bash
%fs <command> file:/<path>
dbutils.fs.<command> ("file:/<path>/")
```

`%sh`はデフォルトでローカルファイルシステムから読み込みを行いますので、`file:/`を使う必要はありません。

```bash:Bash
%sh <command> /<path>
```

#### サンプル

```bash:Bash
# With %fs and dbutils.fs, you must use file:/ to read from local filesystem
%fs ls file:/tmp
%fs mkdirs file:/tmp/my_local_dir
dbutils.fs.ls ("file:/tmp/")
dbutils.fs.put("file:/tmp/my_new_file", "This is a file on the local driver node.")
```

```bash:Bash
# %sh reads from the local filesystem by default
%sh ls /tmp
```

### マウントされたオブジェクトストレージのファイルへのアクセス

DBFSにオブジェクトストレージをマウントすることで、ローカルファイルシステムのようにオブジェクトストレージのオブジェクトにアクセスすることができます。

#### サンプル

```py:Python
dbutils.fs.ls("/mnt/mymount")
df = spark.read.text("dbfs:/mymount/my_file.txt")
```

### サマリーのテーブル及び図

このセクションで説明されたコマンド、および、いつそれぞれの文法を使うべきかを要約、説明するテーブル、図となります。

| コマンド | デフォルトロケーション | rootからの読み込み | ローカルファイルシステムからの読み込み |
|:--|:--|:--|:--|
|`%fs`   | root  |   | パスに`file:/`を追加  |
|`%sh`  | ローカルドライバーノード  | パスに`/dbfs`を追加  |   |
|`dbutils.fs`   | root  |   | パスに`file:/`を追加  |
|`os.<command>`   | ローカルドライバーノード  | パスに`/dbfs`を追加  |   |

![](https://docs.databricks.com/_images/dbfs-and-local-file-paths.png)

## ファイルアップロードのインタフェース

お使いのローカルマシンにDatabricksで分析したい小規模のデータファイルがある場合には、DBFSファイルブラウザー、あるいはノートブックのインタフェースを用いて簡単に[Databricksファイルシステム(DBFS)](https://qiita.com/taka_yayoi/items/897264c486e179d72247)にインポートすることができます。

ファイルは[FileStore](https://docs.databricks.com/data/filestore.html)ディレクトリにアップロードされます。

### ファイルブラウザーからDBFSへのデータのアップロード

:::note
**注意**
この機能はデフォルトでは無効化されています。本機能を使用する前に管理者がDBFSブラウザーを有効化する必要があります。[Manage the DBFS file browser](https://docs.databricks.com/administration-guide/workspace/dbfs-browser.html)を参照ください。
:::

1. サイドバーの![](https://docs.databricks.com/_images/data-icon.png)**Data**をクリックします。
1. ページの上部にある**DBFS**ボタンをクリックします。
1. ページの上部にある**Upload**ボタンをクリックします。
1. **Upload Data to DBFS**ダイアログでは、オプションとしてターゲットのディレクトリを選択するか、新たなディレクトリを選択します。
1. **Files**ボックスに、アップロードするローカルファイルをドラッグアンドドロップするか、ファイルブラウザーで選択します。

    ![](https://docs.databricks.com/_images/upload.png)

アップロードされたファイルは、ワークスペースにアクセスできるすべてのユーザーがアクセスすることができます。

### ノートブックからDBFSへのデータのアップロード

:::note
**注意**
この機能はデフォルトで有効化されています。管理者が[この機能を無効化](https://docs.databricks.com/administration-guide/workspace/dbfs-ui-upload.html)した場合、ファイルをアップロードすることはできません。
:::

UIを使って[テーブル](https://qiita.com/taka_yayoi/items/e7f6982dfbee7fc84894)を作成するためには、[UIによるテーブルの作成](https://qiita.com/taka_yayoi/items/e7f6982dfbee7fc84894#ui%E3%81%AB%E3%82%88%E3%82%8B%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB%E3%81%AE%E4%BD%9C%E6%88%90)を参照ください。

ノートブックで使うデータをアップロードするには、以下の手順を踏みます。

1. 新規ノートブックを作成、あるいは既存のノートブックを開き、**File > Upload Data**をクリックします。
![](https://docs.databricks.com/_images/upload-data-menu.png)
1. アップロードするファイルを格納するターゲットのDBFSディレクトリを選択します。ターゲットディレクトリのデフォルトは`/shared_uploads/<your-email-address>/`となります。

    アップロードされたファイルは、ワークスペースにアクセスできるすべてのユーザーがアクセスすることができます。

1. ファイルをドラッグ&ドロップするか、ローカルシステムのファイルを指定するために**Browse**をクリックします。
![](https://docs.databricks.com/_images/upload-data-upload-step_2.png)
1. ファイルのアップロードが完了したら**Next**をクリックします。

    CSV、TSV、JSONファイルをアップロードした場合、Databricksはデータをデータフレームにロードするためのコードを生成します。
![](https://docs.databricks.com/_images/upload-data-view-files-sample-code_2.png)

    テキストをクリップボードに保存するには、**Copy**をクリックします。

1. ノートブックに戻るには**Done**をクリックします。

## Databricks CLI

DBFSコマンドラインインタフェース(CLI)は、DBFSに対する使いやすいコマンドラインインタフェースを提供するために[DBFS API 2\.0](https://docs.databricks.com/dev-tools/api/latest/dbfs.html)を使用します。このクライアントを使うことで、Unixのコマンドラインと同じようなコマンドを使ってDBFSを操作することができます。

```bash:Bash
# List files in DBFS
dbfs ls
# Put local file ./apple.txt to dbfs:/apple.txt
dbfs cp ./apple.txt dbfs:/apple.txt
# Get dbfs:/apple.txt and save to local file ./apple.txt
dbfs cp dbfs:/apple.txt ./apple.txt
# Recursively put local dir ./banana to dbfs:/banana
dbfs cp -r ./banana dbfs:/banana
```

DBFSコマンドラインインタフェースの詳細については、[Databricks CLI](https://docs.databricks.com/dev-tools/cli/index.html)を参照ください。

## `dbutils`

[dbutils\.fs](https://qiita.com/taka_yayoi/items/3717623187859809515d#%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%83%A6%E3%83%BC%E3%83%86%E3%82%A3%E3%83%AA%E3%83%86%E3%82%A3dbutilsfs)は、DBFSのファイルにアクセするためのファイルシステムライクなコマンドを提供します。このセクションでは、`dbutils.fs`コマンドを使ってどのようにDBFSのファイルを読み書きするのかを説明します。

:::note
**ティップス**
DBFSのヘルプメニューを表示するには、`dbutils.fs.help()`コマンドを使用します。
:::

### ローカルファイルシステムのようにDBFSにファイルを読み書きする

```py:Python
dbutils.fs.mkdirs("/foobar/")
```

```py:Python
dbutils.fs.put("/foobar/baz.txt", "Hello, World!")
```

```py:Python
dbutils.fs.head("/foobar/baz.txt")
```

```py:Python
dbutils.fs.rm("/foobar/baz.txt")
```

### DBFSのパスにアクセスするために`dbfs:`を使う

```py:Python
display(dbutils.fs.ls("dbfs:/foobar"))
```

### %fsマジックコマンドを使う

ノートブックでは、`dbutils`ファイルシステムモジュールにアクセするための、`%fs`[マジックコマンド](https://qiita.com/taka_yayoi/items/dfb53f63aed2fbd344fc#%E6%B7%B7%E6%88%90%E8%A8%80%E8%AA%9E)が提供されています。ほとんどの`dbutils.fs`コマンドを`%fs`マジックコマンドで使用することができます。

```bash:Bash
# List the DBFS root

%fs ls

# Recursively remove the files under foobar

%fs rm -r foobar

# Overwrite the file "/mnt/my-file" with the string "Hello world!"

%fs put -f "/mnt/my-file" "Hello world!"
```

## DBFS API

[DBFS API 2\.0](https://docs.databricks.com/dev-tools/api/latest/dbfs.html)と[Upload a big file into DBFS](https://docs.databricks.com/dev-tools/api/latest/examples.html#dbfs-large-files)を参照ください。

## Spark API

Spark APIを使用している際は、ファイルは`"/mnt/training/file.csv"`や`"dbfs:/mnt/training/file.csv"`で参照することになります。以下の例ではファイル`foo.text`をDBFSの`/tmp`ディレクトリに書き込んでいます。

```py:Python
df.write.text("/tmp/foo.txt")
```

DBFSにアクセスするためにSpark APIを使用している際(例えば、`spark.read`の呼び出し)には、ターゲットのDBFSの位置を完全な絶対パスで指定する必要があります。パスは`/`あるいは`dbfs:/`で始まるDBFSルートからスタートする必要があります。`/`と`dbfs:/`は同じ意味です。例えば、DBFSの`/FileStore`にある`people.json`を読み込むには以下のいずれかを実行します。

```py:Python
df = spark.read.json('dbfs:/FileStore/people.json')
df.show()
```

```py:Python
df = spark.read.json('/FileStore/people.json')
df.show()
```

以下の例は動作しません。

```py:Python
# This will not work. The path must be absolute. It
# must start with '/' or 'dbfs:/'.
df = spark.read.json('FileStore/people.json')
df.show()
```

## ローカルファイルAPI

DBFSのパスに対して読み書きを行う際にローカルファイルAPIを使用することができます。Databricksは、クラスターノードで動作するプロセスが背後の分散ストレージレイヤーにローカルファイルAPIでアクセスできるように、それぞれのクラスターノードにFUSEマウント`/dbfs`を設定します。ローカルファイルAPIを使用する際には、以下のようにパスの先頭に`/dbfs`をつける必要があります。

```py:Python
#write a file to DBFS using Python file system APIs
with open("/dbfs/tmp/test_dbfs.txt", 'w') as f:
  f.write("Apache Spark is awesome!\n")
  f.write("End of example!")

# read the file
with open("/dbfs/tmp/test_dbfs.txt", "r") as f_read:
  for line in f_read:
    print(line)
```

```scala:Scala
import scala.io.Source

val filename = "/dbfs/tmp/test_dbfs.txt"
for (line <- Source.fromFile(filename).getLines()) {
  println(line)
}
```

### ローカルファイルAPIの制限

以下では、それぞれのFUSE、Databricksランタイムのバージョンに適用されるローカルファイルAPIの制限を列挙します。

- **すべて**: クライアントサイド暗号化が有効化されたAmazon S3マウントをサポートしていません。
- **FUSE V2**(Databricksランタイム6.x、7.xのデフォルト)
    - ランダムの書き込みはサポートしていません。ランダムの書き込みが必要となるワークロードにおいては、以下のようにローカルディスクでオペレーションを行い、`/dbfs`に結果をコピーするようにしてください。

    ```py: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', '/dbfs/tmp/excel.xlsx')
    ```

    - sparseファイルはサポートしていません。sparseファイルをコピーするには`cp --sparse=never`を使用してください。

    ```bash:Bash
    $ cp sparse.file /dbfs/sparse.file
    error writing '/dbfs/sparse.file': Operation not supported
    $ cp --sparse=never sparse.file /dbfs/sparse.file
    ```

- **FUSE V1**(Databricksランタイム5.5 LTSのデフォルト)

    > **重要！**
`<DBR>` 5.5 LTSのFUSE V1で問題に遭遇した場合には、FUSE V2を使用することをお勧めします。`<DBR>` 5.5 LTSのデフォルトFUSEバージョンは[環境変数](https://qiita.com/taka_yayoi/items/8d951b660cd87c6c5f18#%E7%92%B0%E5%A2%83%E5%A4%89%E6%95%B0)`DBFS_FUSE_VERSION=2`を設定することで上書きすることができます。

    - *2GB以下*のサイズのファイルのみをサポートしています。2GB以上のサイズのファイルを読み書きしようとすると破損ファイルに直面することになります。2GB以上のサイズのファイルにアクセスするには、[DBFS CLI](https://docs.databricks.com/dev-tools/cli/dbfs-cli.html)、[`dbutils.fs`](#dbutils)、Spark API、[#ディープラーニング用ローカルファイルapi]で説明されている`/dbfs/ml`フォルダーを使用してください。
    - ローカルファイルシステムAPIを用いてファイルを書き込み、すぐに[DBFS CLI](https://docs.databricks.com/dev-tools/cli/dbfs-cli.html)、[`dbutils.fs`](#dbutils)、Spark APIを持ちてアクセスしようとした場合、`FileNotFoundException`やファイルサイズ0、古いファイルコンテンツに遭遇する場合があります。これは、オペレーティングシステムのキャッシュの書き込みがデフォルトとなっているため予期される挙動です。こられの書き込みが永続化ストレージ(ここではDBFS)でフラッシュされることを強制するには標準的なUnixシステムコール[sync](https://en.wikipedia.org/wiki/Sync_(Unix))を使用してください。

    ```scala:Scala
    // scala
    import scala.sys.process._
    // Write a file using the local file API (over the FUSE mount).
    dbutils.fs.put("file:/dbfs/tmp/test", "test-contents")
    // Flush to persistent storage.
    "sync /dbfs/tmp/test" !
    // Read the file using "dbfs:/" instead of the FUSE mount.
    dbutils.fs.head("dbfs:/tmp/test")
    ```

### ディープラーニング用ローカルファイルAPI

データのロード、チェックポイント、ロギングにDBFSへのアクセスを必要とする[分散ディープラーニングアプリケーション](https://docs.databricks.com/applications/machine-learning/load-data/ddl-data.html)においては、Databricksランタイム6.0以降では、ディープラーニングワークロードに最適化された高性能な`/dbfs`マウントポイントが提供されています。

Databricksランタイム5.5 LTSでは`/dbfs/ml`のみが最適化されています。このバージョンのDatabricksにおいては、`dbfs:/ml`にマッピングされる`/dbfs/ml`にデータを保存することをお勧めします。

### Databricks 無料トライアル

[Databricks 無料トライアル](https://databricks.com/jp/try-databricks)