Compartilhar via


FileStore

Importante

Esta documentação foi desativada e pode não estar atualizada. Não há mais suporte para os produtos, serviços ou tecnologias mencionados neste conteúdo.

A FileStore é uma pasta especial no DBFS em que você pode salvar arquivos e fazer com que eles possam ser acessados no navegador da Web. Você pode usar FileStore para:

  • Salvar arquivos, como imagens e bibliotecas, que podem ser acessados em HTML e JavaScript ao chamar displayHTML.
  • Salvar arquivos de saída que você deseja baixar no desktop local.
  • Fazer upload de CSVs e de outros arquivos de dados do desktop local para processar no Databricks.

Quando você usa determinados recursos, o Azure Databricks coloca arquivos nas seguintes pastas de FileStore:

  • /FileStore/jars – contém bibliotecas de workspace herdadas carregadas. Se você excluir arquivos dessa pasta, as bibliotecas que fazem referência a eles no workspace poderão não funcionar mais.
  • /FileStore/tables – contém arquivos que você importa usando a interface do usuário. Se você excluir arquivos dessa pasta, as tabelas criadas com base nesses arquivos poderão não estar mais acessíveis.

Importante

As bibliotecas podem ser instaladas a partir do DBFS ao usar o Databricks Runtime 14.3 LTS e inferior. Porém, qualquer usuário do espaço de trabalho pode modificar os arquivos de biblioteca armazenados no DBFS. Para melhorar a segurança das bibliotecas em um workspace do Azure Databricks, o armazenamento de arquivos de biblioteca na raiz do DBFS foi preterido e desabilitado por padrão no Databricks Runtime 15.1 e em versões posteriores. Consulte O armazenamento de bibliotecas na raiz do DBFS é preterido e desabilitado por padrão.

Em vez disso, o Databricks recomenda carregar todas as bibliotecas, incluindo bibliotecas python, arquivos JAR e conectores Spark, para arquivos de workspace ou volumes do Catálogo do Unity ou usando repositórios de pacotes de biblioteca. Se sua carga de trabalho não der suporte a esses padrões, você também poderá usar bibliotecas armazenadas no armazenamento de objetos de nuvem.

Salvar um arquivo no FileStore

Use dbutils.fs.put para gravar arquivos de texto arbitrários no diretório /FileStore do 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 exemplo a seguir, substitua <databricks-instance> pela URL do workspace da sua implantação do Azure Databricks.

Arquivos armazenados em /FileStore podem ser acessados no seu navegador da Web em https://<databricks-instance>/files/<path-to-file>?o=######. Por exemplo, o arquivo armazenado em /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 na URL.

Observação

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

Inserir imagens estáticas em notebooks

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

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

ou sintaxe de importação de imagem de Markdown:

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

Você pode carregar imagens estáticas usando a API do DBFS e a biblioteca HTTP de solicitações do Python. No exemplo a seguir:

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

Observação

Como melhor prática de segurança, ao autenticar com ferramentas, sistemas, scripts e aplicativos automatizados, o Databricks recomenda que você use tokens de acesso pertencentes às entidades de serviço e não aos usuários do workspace. 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 em /FileStore e redimensione usando os parâmetros dela 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 notebook: usar uma biblioteca JavaScript

Este notebook mostra como usar o FileStore para conter uma biblioteca JavaScript.

Notebook de exemplo do DBFS FileStore

Obter notebook