FileStore

FileStore ist ein spezieller Ordner innerhalb von DBFS, in dem Sie Dateien speichern und über Ihren Webbrowser zugänglich machen können. Sie können FileStore für Folgendes verwenden:

  • Speichern von Dateien, wie z. B. Bildern und Bibliotheken, auf die in HTML und JavaScript zugegriffen werden kann, wenn Sie displayHTML aufrufen
  • Speichern von Ausgabedateien, die Sie auf Ihren lokalen Desktop herunterladen möchten
  • Hochladen von CSV- und andere Datendateien von Ihrem lokalen Desktop zur Verarbeitung in Databricks

Wenn Sie bestimmte Features verwenden, legt Azure Databricks Dateien in den folgenden Ordnern unter FileStore ab:

  • /FileStore/jars - enthält hochgeladene Legacyarbeitsbereichsbibliotheken. Wenn Sie Dateien in diesem Ordner löschen, funktionieren Bibliotheken, die auf diese Dateien in Ihrem Arbeitsbereich verweisen, möglicherweise nicht mehr.
  • /FileStore/tables: enthält die Dateien, die Sie über die Benutzeroberfläche importieren. Wenn Sie Dateien in diesem Ordner löschen, kann es sein, dass auf Tabellen, die Sie anhand dieser Dateien erstellt haben, nicht mehr zugegriffen werden kann.

Wichtig

Bei Verwendung von Databricks Runtime 14.3 LTS und niedriger können Bibliotheken über DBFS installiert werden. Arbeitsbereichsbenutzer und -benutzerinnen können jedoch Bibliotheksdateien ändern, die in DBFS gespeichert sind. Um die Sicherheit von Bibliotheken in einem Azure Databricks-Arbeitsbereich zu verbessern, wurde das Speichern von Bibliotheksdateien im DBFS-Stamm eingestellt und ist in Databricks Runtime 15.0 und höher standardmäßig deaktiviert. Weitere Informationen finden Sie unter Das Speichern von Bibliotheken im DBFS-Stamm ist veraltet und standardmäßig deaktiviert.

Stattdessen empfiehlt Databricks, alle Bibliotheken (einschließlich Python-Bibliotheken, JAR-Dateien und Spark-Connectors) in Arbeitsbereichsdateien oder auf Unity Catalog-Volumes hochzuladen oder Bibliothekspaketrepositorys zu verwenden. Wenn Ihre Workload diese Muster nicht unterstützt, können Sie auch Bibliotheken verwenden, die im Cloudobjektspeicher gespeichert sind.

Speichern einer Datei in FileStore

Sie können dbutils.fs.put verwenden, um beliebige Textdateien in das /FileStore-Verzeichnis in DBFS zu schreiben:

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")

Ersetzen Sie in den folgenden Beispielen <databricks-instance> durch die Arbeitsbereichs-URL Ihrer Azure Databricks-Bereitstellung.

Auf die in /FileStore gespeicherten Dateien können Sie über Ihren Webbrowser unter https://<databricks-instance>/files/<path-to-file>?o=###### zugreifen. Zum Beispiel ist der Zugriff auf die Datei, die Sie in /FileStore/my-stuff/my-file.txt gespeichert haben, unter https://<databricks-instance>/files/my-stuff/my-file.txt?o=###### möglich, wobei die Zahl nach o= die gleiche ist wie in Ihrer URL.

Hinweis

Sie können auch die DBFS-Schnittstellen zum Hochladen von Dateien verwenden, um Dateien im Verzeichnis /FileStore zu speichern. Weitere Informationen finden Sie unter Erkunden und Erstellen von Tabellen in DBFS.

Einbetten statischer Bilder in Notebooks

Sie können den Speicherort files/ verwenden, um statische Bilder in Ihre Notebooks einzubetten:

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

oder Markdown-Syntax zum Importieren von Bildern:

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

Sie können statische Bilder hochladen, indem Sie die DBFS-API und die Python-HTTP-Bibliothek requests verwenden. Siehe folgendes Beispiel:

  • Ersetzen Sie <databricks-instance> durch die Arbeitsbereichs-URL Ihrer Azure Databricks-Bereitstellung.
  • Ersetzen Sie <token> durch den Wert Ihres persönlichen Zugriffstokens.
  • Ersetzen Sie <image-dir> durch den Speicherort in FileStore, in den Sie die Bilder hochladen möchten.

Hinweis

Als bewährte Methode für die Sicherheit empfiehlt Databricks, dass Sie bei der Authentifizierung mit automatisierten Tools, Systemen, Skripten und Anwendungen persönliche Zugriffstoken verwenden, die zu Dienstprinzipalen und nicht zu Benutzern des Arbeitsbereichs gehören. Informationen zum Erstellen von Token für Dienstprinzipale finden Sie unter Verwalten von Token für einen Dienstprinzipal.

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)

Skalieren statischer Bilder

Um die Größe eines im DBFS gespeicherten Bilds zu skalieren, kopieren Sie das Bild in /FileStore, und ändern dann die Größe mithilfe der Bildparameter in 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;">''')

Notebookbeispiel: Verwenden einer JavaScript-Bibliothek

Dieses Notebook zeigt, wie Sie FileStore so einsetzen, dass eine JavaScript-Bibliothek enthalten ist.

DBFS FileStore-Beispielnotebook

Notebook abrufen