FileStore

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

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

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

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

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 と同じです。

Note

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

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

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

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

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

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

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

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

Note

セキュリティのベスト プラクティスとしては、自動化ツール、システム、スクリプト、アプリを使用して認証する場合、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 ライブラリを含める方法を示しています。

FileStore デモ ノートブック

ノートブックを入手