FileStore

FileStore は DBFS 内の特別なフォルダーで、ここにファイルを保存し、Web ブラウザーからアクセスできるようにすることができます。 FileStore を使用して、次のことを実行できます。

  • displayHTML を呼び出す際に HTML および JavaScript 内でアクセスできるファイル (イメージやライブラリなど) を保存します。
  • ローカル デスクトップにダウンロードする出力ファイルを保存します。
  • Databricks で処理するために、ローカル デスクトップから CSV などのデータ ファイルをアップロードします。

特定の機能を使用する場合、Azure Databricks では FileStore の下の次のフォルダーにファイルが保存されます。

  • /FileStore/jars - アップロードされたレガシ ワークスペース ライブラリが含まれています。 このフォルダー内のファイルを削除すると、ワークスペース内のこれらのファイルを参照するライブラリが機能しなくなる可能性があります。
  • /FileStore/tables - UI を使用してインポートするファイルが含まれます。 このフォルダー内のファイルを削除すると、これらのファイルから作成したテーブルにアクセスできなくなる可能性があります。

重要

Databricks Runtime 14.3 LTS 以下を使用する場合は、DBFS からライブラリをインストールできます。 ただし、ワークスペース ユーザーは、DBFS に格納されているライブラリ ファイルを変更できます。 Azure Databricks ワークスペース内のライブラリのセキュリティを向上させるために、Databricks Runtime 15.0 以降では、ライブラリ ファイルを DBFS ルートに格納することは非推奨となり、既定では無効になっています。 「DBFS ルートにライブラリを格納することは非推奨であり、既定では無効になっている」を参照してください。

代わりに、Databricks では、ワークスペース ファイルまたは Unity Catalog ボリュームにライブラリをアップロードすること、またはライブラリ パッケージ リポジトリを使用することを推奨しています。 ワークロードでこれらのパターンがサポートされない場合、クラウド オブジェクト ストレージに格納されているライブラリも使用できます。

FileStore にファイルを保存する

dbutils.fs.put を使用して、DBFS 内の /FileStore ディレクトリに任意のテキスト ファイルを書き込むことができます。

dbutils.fs.put("/FileStore/my-stuff/my-file.txt", "This is the actual text that will be saved to disk. Like a 'Hello world!' example")

以下について、<databricks-instance> を Azure Databricks デプロイのワークスペース URL に置き換えます。

/FileStore に格納されているファイルは、 Web ブラウザーで https://<databricks-instance>/files/<path-to-file>?o=###### からアクセスできます。 たとえば、/FileStore/my-stuff/my-file.txt に格納したファイルは https://<databricks-instance>/files/my-stuff/my-file.txt?o=###### からアクセスできます。ここで、o= の後の数値は URL と同じです。

注意

また、DBFS ファイル アップロード インターフェイスを使用して、ファイルを /FileStore ディレクトリに保存することもできます。 DBFS でのテーブルの探索と作成に関するページを参照してください。

ノートブックに静的イメージを埋め込む

files/ の場所を使用して、ノートブックに静的イメージを埋め込むことができます。

displayHTML("<img src ='files/image.jpg'>")

または Markdown のイメージ インポート構文は次のようになります。

%md
![my_test_image](files/image.jpg)

静的イメージは、DBFS API および requests Python HTTP ライブラリを使用してアップロードできます。 次の例では

  • <databricks-instance> を Azure Databricks デプロイのワークスペース URL に置き換えます。
  • <token>個人用アクセス トークンの値に置き換えます。
  • <image-dir> を、イメージ ファイルをアップロードする FileStore 内の場所に置き換えます。

注意

セキュリティのベスト プラクティスとして、自動化ツール、システム、スクリプト、アプリを使用して認証する場合、Databricks では、ワークスペース ユーザーではなくサービス プリンシパルに属する個人用アクセス トークンを使用することを推奨しています。 サービス プリンシパルのトークンを作成するには、「サービス プリンシパルのトークンを管理する」をご覧ください。

import requests
import json
import os

TOKEN = '<token>'
headers = {'Authorization': 'Bearer %s' % TOKEN}
url = "https://<databricks-instance>/api/2.0"
dbfs_dir = "dbfs:/FileStore/<image-dir>/"

def perform_query(path, headers, data={}):
  session = requests.Session()
  resp = session.request('POST', url + path, data=json.dumps(data), verify=True, headers=headers)
  return resp.json()

def mkdirs(path, headers):
  _data = {}
  _data['path'] = path
  return perform_query('/dbfs/mkdirs', headers=headers, data=_data)

def create(path, overwrite, headers):
  _data = {}
  _data['path'] = path
  _data['overwrite'] = overwrite
  return perform_query('/dbfs/create', headers=headers, data=_data)

def add_block(handle, data, headers):
  _data = {}
  _data['handle'] = handle
  _data['data'] = data
  return perform_query('/dbfs/add-block', headers=headers, data=_data)

def close(handle, headers):
  _data = {}
  _data['handle'] = handle
  return perform_query('/dbfs/close', headers=headers, data=_data)

def put_file(src_path, dbfs_path, overwrite, headers):
  handle = create(dbfs_path, overwrite, headers=headers)['handle']
  print("Putting file: " + dbfs_path)
  with open(src_path, 'rb') as local_file:
    while True:
      contents = local_file.read(2**20)
      if len(contents) == 0:
        break
      add_block(handle, b64encode(contents).decode(), headers=headers)
    close(handle, headers=headers)

mkdirs(path=dbfs_dir, headers=headers)
files = [f for f in os.listdir('.') if os.path.isfile(f)]
for f in files:
  if ".png" in f:
    target_path = dbfs_dir + f
    resp = put_file(src_path=f, dbfs_path=target_path, overwrite=True, headers=headers)
    if resp == None:
      print("Success")
    else:
      print(resp)

静的イメージをスケーリングする

DBFS に保存したイメージのサイズをスケーリングするには、イメージを /FileStore にコピーし、displayHTML のイメージ パラメーターを使用してサイズを変更します。

dbutils.fs.cp('dbfs:/user/experimental/MyImage-1.png','dbfs:/FileStore/images/')
displayHTML('''<img src="files/images/MyImage-1.png" style="width:600px;height:600px;">''')

ノートブックの例: JavaScript ライブラリを使用する

このノートブックでは、FileStore を使用して JavaScript ライブラリを含める方法を示しています。

DBFS FileStore ノートブックの例

ノートブックを入手