Aller au contenu principal

FileStore

important

Cette documentation a été retirée et pourrait ne pas être mise à jour. Les produits, services ou technologies mentionnés dans ce contenu ne sont plus pris en charge.

FileStore est un dossier spécial au sein de DBFS où vous pouvez enregistrer des fichiers et les rendre accessibles à votre navigateur web. Vous pouvez utiliser FileStore pour :

  • Enregistrez les fichiers, tels que les images et les bibliothèques, qui sont accessibles dans HTML et JavaScript lorsque vous appelez displayHTML.
  • Enregistrez les fichiers de sortie que vous souhaitez download sur votre ordinateur de bureau local.
  • Upload des fichiers CSV et d'autres fichiers de données depuis votre ordinateur local pour les traiter sur Databricks.

Lorsque vous utilisez certaines fonctionnalités, Databricks place les fichiers dans les dossiers suivants sous FileStore :

  • /FileStore/jars - contient des anciennes bibliothèques Workspace upload. Si vous supprimez des fichiers dans ce dossier, les bibliothèques qui référencent ces fichiers dans votre workspace risquent de 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 pourraient ne plus être accessibles.
important

Les bibliothèques peuvent être installées à partir de DBFS lors de l’utilisation de Databricks Runtime 14.3 LTS et versions antérieures. Cependant, tout utilisateur de Workspace peut modifier les fichiers de bibliothèque stockés dans DBFS. Pour améliorer la sécurité des bibliothèques dans un Workspace Databricks, le stockage des fichiers de bibliothèque dans la racine DBFS est obsolète et désactivé par default dans Databricks Runtime 15.1 et versions ultérieures. Consultez Le stockage des bibliothèques dans la racine DBFS est déprécié et désactivé par default.

Au lieu de cela, Databricks recommande d’upload toutes les bibliothèques, y compris les bibliothèques Python, les fichiers JAR et les connecteurs Spark, dans les fichiers Workspace ou les volumes Unity Catalog, ou d’utiliser les repositories 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 objet cloud.

Enregistrer un fichier dans FileStore

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

Python
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 ce qui suit, remplacez <databricks-instance> par l'URL du Workspace de votre déploiement Databricks.

Les fichiers stockés dans /FileStore sont accessibles dans votre navigateur web à https://<databricks-instance>/files/. Par exemple, le fichier que vous avez stocké dans /FileStore/my-stuff/my-file.txt est accessible via https://<databricks-instance>/files/my-stuff/my-file.txt.

Cependant, s'il y a ?o= dans l'URL de déploiement, par exemple, https://<databricks-instance>/?o=6280049833385130, remplacez https://<databricks-instance>/files/my-stuff/my-file.txt par https://<databricks-instance>/files/my-stuff/my-file.txt?o=###### où le nombre après o= est le même que dans votre URL.

remarque

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

Intégrer des images statiques dans les Notebooks

Vous pouvez utiliser l'emplacement files/ pour intégrer des images statiques dans vos notebooks :

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

ou syntaxe d'importation d'image Markdown :

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

Exemple utilisant Markdown

Par exemple, supposons que vous ayez le fichier image du logo Databricks dans FileStore :

Bash
dbfs ls dbfs:/FileStore/
Console
databricks-logo-mobile.png

Lorsque vous incluez le code suivant dans une cellule Markdown, l'image est rendue dans la cellule :

Image dans une cellule Markdown

Exemple rendu :

Image rendue

Exemple d'utilisation de l'API DBFS et de la bibliothèque HTTP Python requests

Vous pouvez upload des images statiques à l'aide de l'API DBFS et de la bibliothèque HTTP requests Python. Dans l'exemple suivant :

  • Remplacez <databricks-instance> par l'URL de Workspace de votre déploiement Databricks.
  • Remplacez <token> par la valeur de votre jeton d'accès personnel.
  • Remplacez <image-dir> par l'emplacement dans FileStore où vous voulez upload les fichiers image.
remarque

En tant que bonne pratique de sécurité lorsque vous vous authentifiez avec des outils, des systèmes, des scripts et des applications automatisés, Databricks vous recommande d'utiliser des jetons OAuth.

Si vous utilisez l'authentification par jeton d'accès personnel, Databricks recommande d'utiliser des jetons d'accès personnels appartenant aux Service Principal plutôt qu'aux utilisateurs du Workspace. Pour créer des jetons pour les Service Principals, consultez Gérer les jetons pour un Service Principal.

Python
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 redimensionner une image que vous avez enregistrée dans DBFS, copiez l'image dans /FileStore, puis redimensionnez-la à l'aide des paramètres d'image dans displayHTML:

Python
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 : Utilisation d'une bibliothèque JavaScript

Ce Notebook montre comment utiliser FileStore pour contenir une bibliothèque JavaScript.

Notebook d'exemple DBFS FileStore