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, o site Databricks recomenda fazer o upload de todas as bibliotecas, incluindo Python biblioteca, JAR arquivos e Spark conectores, para workspace arquivos ou Unity Catalog volumes, ou usar biblioteca pacote repositórios. Se a 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 cloud.
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 emFileStore
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;">''')