FileStore

FileStore est un dossier spécial dans DBFS dans lequel vous pouvez enregistrer des fichiers et les rendre accessibles à votre navigateur Web. Vous pouvez utiliser le cache de pages pour :

  • Enregistrez des fichiers, tels que des images et des bibliothèques, qui sont accessibles au format HTML et JavaScript lorsque vous appelez displayHTML .
  • Enregistrez les fichiers de sortie que vous souhaitez télécharger sur votre bureau local.
  • Télécharger CSV et d’autres fichiers de données de votre bureau local à traiter sur Databricks.

Lorsque vous utilisez certaines fonctionnalités, Azure Databricks place les fichiers dans les dossiers suivants sous le répertoire de fichiers :

  • /FileStore/jars : contient les bibliothèques chargées et héritées de l’espace de travail. Si vous supprimez des fichiers dans ce dossier, les bibliothèques qui font référence à ces fichiers dans votre espace de travail peuvent ne plus fonctionner.
  • /FileStore/tables -contient les fichiers que vous importez à l’aide de l' interface utilisateur. Si vous supprimez des fichiers dans ce dossier, les tables que vous avez créées à partir de ces fichiers risquent de ne plus être accessibles.

Important

Vous pouvez également installer les bibliothèques à partir de DBFS lors de l’utilisation de Databricks Runtime 14.3 LTS et versions antérieures. Toutefois, tout utilisateur de l’espace de travail peut modifier les bibliothèques de codes stockées dans DBFS. Pour améliorer la sécurité des bibliothèques dans un espace de travail Azure Databricks, le stockage des bibliothèques de codes dans la racine DBFS est déconseillé et désactivé par défaut dans Databricks Runtime 15.0 et versions ultérieures. Consultez Le stockage des bibliothèques dans la racine DBFS est déconseillé et désactivé par défaut.

Au lieu de cela, Databricks recommande de charger toutes les bibliothèques, notamment les bibliothèques Python, les fichiers JAR et les connecteurs Spark, dans des fichiers d’espace de travail ou des volumes du catalogue Unity, ou d’utiliser des référentiels de packages de bibliothèques. Si votre charge de travail ne prend pas en charge ces modèles, vous pouvez également utiliser des bibliothèques stockées dans le stockage d’objets cloud.

Enregistrer un fichier dans le cache de fichiers

Vous pouvez utiliser dbutils.fs.put pour écrire des fichiers texte arbitraires dans le répertoire /FileStore dans DBFS :

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

Dans les exemples suivants, remplacez <databricks-instance> par l’URL d’espace de travail de votre déploiement Azure Databricks.

Les fichiers stockés dans /FileStore sont accessibles dans votre navigateur Web à l’adresse https://<databricks-instance>/files/<path-to-file>?o=###### . Par exemple, le fichier que vous avez stocké dans /FileStore/my-stuff/my-file.txt est accessible à https://<databricks-instance>/files/my-stuff/my-file.txt?o=###### l’emplacement où le nombre après o= est identique à celui de votre URL.

Notes

Vous pouvez également utiliser les interfaces de téléchargement de fichiers DBFS pour placer des fichiers dans le /FileStore répertoire. Consultez Explorer et créer des tables dans DBFS.

Incorporer des images statiques dans des notebooks

Vous pouvez utiliser l'emplacement files/ pour incorporer des images statiques dans vos blocs-notes :

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

ou la syntaxe d'importation d'images Markdown :

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

Vous pouvez charger des images statiques à l’aide de l’API DBFS et de la bibliothèque de requêtes HTTP Python. Dans l’exemple suivant :

  • Remplacez <databricks-instance> par l'URL de l'espace de travail de votre déploiement Azure Databricks.
  • Remplacer <token> par la valeur de votre jeton d'accès personnel.
  • Remplacez <image-dir> par l’emplacement FileStore où vous souhaitez télécharger les fichiers image.

Notes

En guise de bonne pratique de sécurité, quand vous vous authentifiez avec des outils, systèmes, scripts et applications automatisés, Databricks recommande d’utiliser des jetons d’accès personnels appartenant à des principaux de service et non des utilisateurs de l’espace de travail. Pour créer des jetons d’accès pour des principaux de service, consultez la section Gérer les jetons pour un principal de service.

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)

Mettre à l’échelle des images statiques

Pour mettre à l’échelle la taille d’une image que vous avez enregistrée sur DBFS, copiez l’image dans /FileStore et redimensionnez-la à l’aide des paramètres d’image dans 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;">''')

Exemple de notebook : utiliser une bibliothèque JavaScript

Ce bloc-notes montre comment utiliser le cache de l’instance pour contenir une bibliothèque JavaScript.

Exemple de notebook DBFS FileStore

Obtenir le notebook