Armazenamento de arquivos

O FileStore é uma pasta especial no DBFS em que você pode salvar arquivos e deixá-los acessíveis no navegador da Web. Você pode usar o FileStore para:

  • Salve arquivos, como imagens e bibliotecas, que podem ser acessados em HTML e JavaScript ao chama displayHTML.

  • Salve os arquivos de saída que deseja baixar em sua área de trabalho local.

  • Carregue CSVs e outros arquivos de dados da sua área de trabalho local para processar no Databricks.

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

  • /FileStore/jars - contém upload de legado workspace biblioteca. Se o senhor excluir os arquivos dessa pasta, a biblioteca que faz referência a esses arquivos no site workspace poderá deixar de funcionar.

  • /FileStore/tables - contém os arquivos que você importa usando a IU. Se você excluir arquivos nesta pasta, as tabelas criadas a partir desses arquivos podem não estar mais acessíveis.

Importante

A biblioteca pode ser instalada a partir do DBFS ao usar o Databricks Runtime 14.3 LTS e o abaixo. No entanto, qualquer usuário do site workspace pode modificar os arquivos de biblioteca armazenados no DBFS. Para melhorar a segurança das bibliotecas em um Databricks workspace, o armazenamento de arquivos de biblioteca no DBFS root está obsoleto e desativado pelo default no Databricks Runtime 15.0 e acima. Consulte O armazenamento de biblioteca em DBFS root está obsoleto e desativado por default.

Em vez disso, a Databricks recomenda fazer o upload da biblioteca para arquivos workspace ou volumes do Unity Catalog, ou usar repositórios de pacotes de biblioteca. Se sua carga de trabalho não for compatível com esses padrões, o senhor também poderá usar a biblioteca armazenada no armazenamento de objetos em nuvens.

Salvar um arquivo no FileStore

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

A seguir, substitua <databricks-instance> pela URL do espaço de trabalho de sua implantação do Databricks.

Os arquivos armazenados em /FileStore podem ser acessados em seu navegador da web em https://<databricks-instance>/files/. 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.

No entanto, se houver ?o= na URL de implementação, por exemplo, https://<databricks-instance>/?o=6280049833385130, substitua https://<databricks-instance>/files/my-stuff/my-file.txt por https://<databricks-instance>/files/my-stuff/my-file.txt?o=###### em que o número após o= seja o mesmo da URL.

Observação

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

Incorporar imagens estáticas nos notebooks

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

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

ou sintaxe de importação de imagem Markdown:

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

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

  • Substitua <databricks-instance> pela URL do espaço de trabalho de sua implantação do Databricks.

  • Substitua <token> pelo valor do seu access tokenpessoal.

  • <image-dir> Substitua pelo local em FileStore que você deseja fazer o upload dos arquivos de imagem.

Observação

Como prática recomendada de segurança, ao autenticar com ferramentas, sistemas, scripts e aplicativos automatizados, a Databricks recomenda que você use access token pessoal pertencente à entidade 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, /FileStore copie a imagem e depois redimensione usando os parâmetros da 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 do Notebook: use uma biblioteca JavaScript

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

Exemplo de notebook do DBFS FileStore

Abra o bloco de anotações em outra guia