FileStore

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

  • displayHTML を呼び出すときにHTMLおよびJavaScript内でアクセスできる画像やライブラリなどのファイルを保存する

  • ダウンロードする出力ファイルをローカル・デスクトップに保存する

  • CSVやその他のデータファイルをローカル・デスクトップからアップロードして Databricksで処理する

特定の機能を使用する際に、DatabricksはFileStore内の次のフォルダにファイルを配置します。

  • /FileStore/jars - アップロードされたレガシー ワークスペース ライブラリが含まれます。 このフォルダー内のファイルを削除すると、ワークスペース内でこれらのファイルを参照するライブラリが機能しなくなる可能性があります。

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

重要:

Databricks Runtime 14.3 LTS 以下を使用する場合、ライブラリは DBFS からインストールできます。 ただし、ワークスペース ユーザーは、DBFS に格納されているライブラリ ファイルを変更できます。 Databricks ワークスペース内のライブラリのセキュリティを向上させるため、DBFS ルートへのライブラリ ファイルの保存は非推奨となり、Databricks Runtime 15.0 以降ではデフォルトで無効になっています。 「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> を Databricks デプロイの ワークスペース URL に置き換えます。

/FileStore に保存されたファイルは、 https://<databricks-instance>/files/ のウェブブラウザからアクセスできます。例えば、 /FileStore/my-stuff/my-file.txt に保存したファイルは https://<databricks-instance>/files/my-stuff/my-file.txt からアクセスできます。

ただし、デプロイメントURLに?o= が含まれる場合(例:https://<databricks-instance>/?o=6280049833385130)は、https://<databricks-instance>/files/my-stuff/my-file.txthttps://<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リクエスト Python HTTP ライブラリを使用してアップロードできます。 次に例を示します。

  • <databricks-instance> を Databricks デプロイの ワークスペース URL に置き換えます。

  • <token>個人用アクセストークンの値に置き換えます。

  • <image-dir> を、画像ファイルをアップロードする FileStore 内の場所に置き換えます。

注:

自動化されたツール、システム、スクリプト、アプリを使用して認証する場合のセキュリティのベスト プラクティスとして、Databricks ではOAuth トークンを使用することをお勧めします。

個人用アクセストークン認証を使用する場合、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のサンプルノートブック

ノートブックを新しいタブで開く