FileStore

Importante

Esta documentação foi desativada e pode não ser atualizada. Os produtos, serviços ou tecnologias mencionados neste conteúdo não são mais suportados.

FileStore é uma pasta especial dentro DBFS onde você pode salvar arquivos e tê-los acessíveis ao seu navegador da web. Você pode usar FileStore para:

  • Guardar ficheiros, como imagens e bibliotecas, que podem ser acedidos através de HTML e JavaScript quando chamar displayHTML.
  • Guarde os ficheiros de saída que pretende transferir para o ambiente de trabalho local.
  • Carregue CSVs e outros arquivos de dados de sua área de trabalho local para processar no Databricks.

Quando utiliza certas funcionalidades, o Azure Databricks coloca ficheiros nas seguintes pastas em FileStore:

  • /FileStore/jars - contém bibliotecas de espaços de trabalho legadas carregadas. Se você excluir arquivos nessa pasta, as bibliotecas que fazem referência a esses arquivos em seu espaço de trabalho podem não funcionar mais.
  • /FileStore/tables - contém os ficheiros que importa usando a interface de utilizador. Se eliminar ficheiros nesta pasta, as tabelas que criou a partir desses ficheiros poderão deixar de estar acessíveis.

Importante

As bibliotecas podem ser instaladas a partir do DBFS ao usar o Databricks Runtime 14.3 LTS e inferior. No entanto, qualquer usuário do espaço de trabalho pode modificar arquivos de biblioteca armazenados no DBFS. Para melhorar a segurança das bibliotecas num espaço de trabalho Azure Databricks, o armazenamento de ficheiros de biblioteca na raiz do DBFS está obsoleto e desativado por padrão no Databricks Runtime 15.1 e superiores. Veja A armazenagem de bibliotecas na raiz do DBFS está preterida e desativada por padrão.

Em vez disso, o Databricks recomenda carregar todas as bibliotecas, incluindo bibliotecas Python, ficheiros JAR e conectores Spark, para ficheiros do espaço de trabalho ou volumes do Unity Catalog. Alternativamente, pode usar repositórios de pacotes de bibliotecas. Se sua carga de trabalho não oferecer suporte a esses padrões, você também poderá usar bibliotecas armazenadas no armazenamento de objetos na nuvem.

Salvar um arquivo no FileStore

Você pode usar dbutils.fs.put para gravar arquivos de texto arbitrários no /FileStore diretório no 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")

No seguinte, substitua <databricks-instance> pelo URL workspace da sua implementação Azure Databricks.

Os arquivos armazenados em /FileStore podem ser acessados em seu navegador da Web em https://<databricks-instance>/files/<path-to-file>?o=######. Por exemplo, o arquivo que você armazenou no /FileStore/my-stuff/my-file.txt pode ser acessado em https://<databricks-instance>/files/my-stuff/my-file.txt?o=###### onde o número após o= é o mesmo que no seu URL.

Nota

Você também pode usar as interfaces de upload de arquivo DBFS para colocar arquivos no /FileStore diretório. Consulte Explorar e criar tabelas no DBFS.

Incorporar imagens estáticas em blocos de notas

Você pode usar o files/ local para incorporar imagens estáticas nos seus notebooks:

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

ou Sintaxe de importação de imagem Markdown:

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

Exemplo usando Markdown

Por exemplo, suponha que você tenha o arquivo de imagem do logotipo Databricks no FileStore:

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

Quando você inclui o seguinte código em uma célula Markdown, a imagem é renderizada na célula:

Imagem na célula Markdown

Exemplo renderizado:

Imagem renderizada

Exemplo usando a API DBFS e pedidos da biblioteca Python HTTP

Pode carregar imagens estáticas usando a API DBFS e a biblioteca HTTP requests Python. No exemplo a seguir:

  • Substitua <databricks-instance> pelo URL workspace da sua implementação Azure Databricks.
  • Substitua <token> pelo valor do seu token de acesso pessoal.
  • Substitua <image-dir> pelo local em FileStore onde você deseja carregar os arquivos de imagem.

Nota

Como prática recomendada de segurança, quando você se autentica com ferramentas, sistemas, scripts e aplicativos automatizados, o Databricks recomenda que você use tokens de acesso pessoal pertencentes a entidades de serviço em vez de usuários do espaço de trabalho. Para criar tokens para entidades de serviço, consulte Gerenciar tokens para uma entidade de serviço.

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)

Dimensionar imagens estáticas

Para dimensionar o tamanho de uma imagem que você salvou no DBFS, copie a imagem para /FileStore e, em seguida, redimensione usando parâmetros de imagem em 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;">''')

Exemplo de bloco de notas: utilizar uma biblioteca JavaScript

Este bloco de anotações mostra como usar FileStore para conter uma biblioteca JavaScript.

Bloco de anotações de exemplo do DBFS FileStore

Obter bloco de notas