FileStore

FileStore es una carpeta especial dentro de DBFS en la que puede guardar archivos y permitir que el explorador web pueda acceder a ellos. Puede usar FileStore para:

  • Guardar archivos, como imágenes y bibliotecas, a los que se puede acceder en HTML y JavaScript al llamar a displayHTML.
  • Guardar en el dispositivo de escritorio local los archivos de salida que desea descargar.
  • Cargar archivos CSV y otros archivos de datos desde el dispositivo de escritorio local para procesarlos en Databricks.

Cuando se usan determinadas características, Azure Databricks coloca los archivos en las carpetas siguientes en FileStore:

  • /FileStore/jars : contiene bibliotecas de áreas de trabajo heredadas cargadas. Si elimina archivos de esta carpeta, es posible que las bibliotecas que hacen referencia a estos archivos en el área de trabajo dejen de funcionar.
  • /FileStore/tables: Contiene los archivos que se importan mediante la interfaz de usuario. Si elimina archivos de esta carpeta, es posible que ya no se pueda acceder a las tablas que se crearon a partir de estos archivos.

Importante

Las bibliotecas se pueden instalar desde DBFS cuando se usa Databricks Runtime 14.3 LTS y versiones anteriores. Sin embargo, cualquier usuario del área de trabajo puede modificar los archivos de biblioteca almacenados en DBFS. Para mejorar la seguridad de las bibliotecas en un área de trabajo de Azure Databricks, el almacenamiento de archivos de biblioteca en la raíz de DBFS está en desuso y está deshabilitado de manera predeterminada en Databricks Runtime 15.0 y versiones posteriores. Consulte El almacenamiento de bibliotecas en la raíz de DBFS está en desuso y deshabilitado de manera predeterminada.

En su lugar, Databricks recomienda cargar todas las bibliotecas, incluidas las bibliotecas de Python, los archivos JAR y los conectores de Spark, en archivos de área de trabajo o volúmenes de Unity Catalog, o mediante repositorios de paquetes de biblioteca. Si la carga de trabajo no admite estos patrones, también puede usar bibliotecas almacenadas en el almacenamiento de objetos en la nube.

Almacenamiento de un archivo en FileStore

Puede usar dbutils.fs.put para escribir archivos de texto arbitrarios en el directorio /FileStore de 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")

A continuación, reemplace <databricks-instance> por la dirección URL del área de trabajo de la implementación de Azure Databricks.

El explorador web puede acceder a los archivos almacenados en /FileStore desde https://<databricks-instance>/files/<path-to-file>?o=######. Por ejemplo, se puede acceder al archivo almacenado en /FileStore/my-stuff/my-file.txt desde https://<databricks-instance>/files/my-stuff/my-file.txt?o=######, donde el número después de o= es el mismo que en la dirección URL.

Nota:

También puede usar las interfaces de carga de archivos DBFS para colocar los archivos en el directorio /FileStore. Vea Exploración y creación de tablas en DBFS.

Inserción de imágenes estáticas en cuadernos

Puede usar la ubicación files/ para insertar imágenes estáticas en los cuadernos:

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

O bien, sintaxis de importación de imágenes de Markdown:

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

Puede cargar imágenes estáticas usando el DBFS API de DBFS y la biblioteca de Python para solicitudes HTTP. En el ejemplo siguiente:

Nota:

Como procedimiento recomendado de seguridad, cuando se autentique con herramientas, sistemas, scripts y aplicaciones automatizados, Databricks recomienda usar los tokens de acceso personal pertenecientes a las entidades de servicio en lugar de a los usuarios del área de trabajo. Para crear tókenes para entidades de servicio, consulte Administración de tokens de acceso para una entidad de servicio.

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)

Escalado de imágenes estáticas

Para escalar el tamaño de una imagen que ha guardado en DBFS, copie la imagen en /FileStore y, a continuación, cambie el tamaño mediante parámetros de imagen en 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;">''')

Ejemplo de cuaderno: uso de una biblioteca de JavaScript

En este cuaderno se muestra cómo usar FileStore para contener una biblioteca de JavaScript.

Cuaderno de ejemplo de FileStore de DBFS

Obtener el cuaderno