Trabalhar com arquivos no Databricks
Databricks tem várias utilidades e APIs para interagir com arquivos nos seguintes locais:
- Unity Catalog volumes
- arquivos do espaço de trabalho
- Armazenamento de objetos na nuvem
- DBFS montagens e DBFS root
- Armazenamento efêmero anexado ao nó driver do clustering
Este artigo contém exemplos de interação com arquivos nesses locais para as seguintes ferramentas:
- Apache Spark
- Spark SQL e Databricks SQL
- Databricks utilidades do sistema de arquivos (
dbutils.fs
ou%fs
) - CLI do Databricks
- API REST da Databricks
- Bash shell comando (
%sh
) - Notebook-A biblioteca com escopo de instalação usa
%pip
- Pandas
- OSS Python utilidades de processamento e gerenciamento de arquivos
As operações de arquivo que exigem acesso aos dados do FUSE não podem acessar diretamente o armazenamento de objetos na nuvem usando URIs. A Databricks recomenda o uso de volumes do Unity Catalog para configurar o acesso a esses locais para o FUSE.
Scala suporta FUSE para volumes Unity Catalog e arquivos workspace em compute configurados com Unity Catalog e modo de acesso dedicado (anteriormente modo de acesso compartilhado). Em compute configurado com o modo de acesso dedicado (anteriormente modo de acesso de usuário único) e Databricks Runtime 14.3 e acima, Scala suporta FUSE para volumes Unity Catalog e arquivos workspace, exceto para subprocessos originados de Scala, como o Scala comando "cat /Volumes/path/to/file".!!
.
Spark e outros processos JVM só podem acessar volumes Unity Catalog ou arquivos workspace usando os leitores e gravadores compatíveis com Unity Catalog. Por exemplo, o senhor não pode especificar um arquivo JAR como dependência em uma configuração Spark e não pode usar a fonte de dados personalizada PySpark. Se o senhor tiver uma carga de trabalho da biblioteca JVM que precise acessar arquivos em volumes ou em arquivos workspace, copie os arquivos para o armazenamento local compute usando o comando Python ou shell, como %sh mv.
. Não use o site %fs
ou dbutils.fs
que usa a JVM. Se um arquivo precisar estar presente durante o início do clustering, use um init script para mover o arquivo primeiro. Consulte O que são scripts de inicialização?
Preciso fornecer um esquema de URI para acessar os dados?
Os caminhos de acesso aos dados no Databricks seguem um dos seguintes padrões:
-
Os caminhos no estilo URI incluem um esquema de URI. Para soluções de acesso a dados nativas do Databricks, os esquemas de URI são opcionais para a maioria dos casos de uso. Ao acessar diretamente os dados no armazenamento de objetos na nuvem, você deve fornecer o esquema de URI correto para o tipo de armazenamento.
-
Os caminhos no estilo POSIX fornecem acesso aos dados em relação à raiz do driver (
/
). Os caminhos no estilo POSIX nunca exigem um esquema. O senhor pode usar volumes do Unity Catalog ou montagens DBFS para fornecer acesso aos dados no estilo POSIX no armazenamento de objetos na nuvem. Muitas estruturas de ML e outros módulos Python OSS exigem o FUSE e só podem usar caminhos no estilo POSIX.
Trabalhar com arquivos em volumes do Unity Catalog
A Databricks recomenda o uso de volumes do Unity Catalog para configurar o acesso a arquivos de dados não tabulares armazenados no armazenamento de objetos na nuvem. Consulte O que são volumes do Unity Catalog?
Ferramenta | Exemplo |
---|---|
Apache Spark | spark.read.format("json").load("/Volumes/my_catalog/my_schema/my_volume/data.json").show() |
Spark SQL e Databricks SQL | SELECT * FROM csv.`/Volumes/my_catalog/my_schema/my_volume/data.csv`; LIST '/Volumes/my_catalog/my_schema/my_volume/'; |
Databricks utilidades do sistema de arquivos | dbutils.fs.ls("/Volumes/my_catalog/my_schema/my_volume/") %fs ls /Volumes/my_catalog/my_schema/my_volume/ |
CLI do Databricks | databricks fs cp /path/to/local/file dbfs:/Volumes/my_catalog/my_schema/my_volume/ |
API REST da Databricks | POST https://<databricks-instance>/api/2.1/jobs/create {"name": "A multitask job", "tasks": [{..."libraries": [{"jar": "/Volumes/dev/environment/libraries/logging/Logging.jar"}],},...]} |
Bash shell comando | %sh curl http://<address>/text.zip -o /Volumes/my_catalog/my_schema/my_volume/tmp/text.zip |
biblioteca instala | %pip install /Volumes/my_catalog/my_schema/my_volume/my_library.whl |
Pandas | df = pd.read_csv('/Volumes/my_catalog/my_schema/my_volume/data.csv') |
OSS Python | os.listdir('/Volumes/my_catalog/my_schema/my_volume/path/to/directory') |
O esquema dbfs:/
é necessário ao trabalhar com a CLI do Databricks.
Limitações de volumes
Os volumes têm as seguintes limitações:
-
Não há suporte para gravações com anexação direta ou não sequenciais (aleatórias), como a gravação de arquivos Zip e Excel. Para cargas de trabalho de apêndice direto ou gravação aleatória, execute as operações em um disco local primeiro e, em seguida, copie os resultados para os volumes do Unity Catalog. Por exemplo:
Python# python
import xlsxwriter
from shutil import copyfile
workbook = xlsxwriter.Workbook('/local_disk0/tmp/excel.xlsx')
worksheet = workbook.add_worksheet()
worksheet.write(0, 0, "Key")
worksheet.write(0, 1, "Value")
workbook.close()
copyfile('/local_disk0/tmp/excel.xlsx', '/Volumes/my_catalog/my_schema/my_volume/excel.xlsx') -
Arquivos esparsos não são suportados. Para copiar arquivos esparsos, use
cp --sparse=never
:Bash$ cp sparse.file /Volumes/my_catalog/my_schema/my_volume/sparse.file
error writing '/dbfs/sparse.file': Operation not supported
$ cp --sparse=never sparse.file /Volumes/my_catalog/my_schema/my_volume/sparse.file
Trabalhar com arquivos workspace
Databricks workspace Os arquivos são os arquivos em um workspace, armazenados no armazenamentoworkspace account . O senhor pode usar os arquivos workspace para armazenar e acessar arquivos como o Notebook, arquivos de código-fonte, arquivos de dados e outros workspace ativos. Como os arquivos do site workspace têm restrições de tamanho, o site Databricks recomenda armazenar aqui apenas arquivos de dados pequenos, principalmente para desenvolvimento e testes.
Ferramenta | Exemplo |
---|---|
Apache Spark | spark.read.format("json").load("file:/Workspace/Users/<user-folder>/data.json").show() |
Spark SQL e Databricks SQL | SELECT * FROM json.`file:/Workspace/Users/<user-folder>/file.json`; |
Databricks utilidades do sistema de arquivos | dbutils.fs.ls("file:/Workspace/Users/<user-folder>/") %fs ls file:/Workspace/Users/<user-folder>/ |
CLI do Databricks | databricks workspace list |
API REST da Databricks | POST https://<databricks-instance>/api/2.0/workspace/delete {"path": "/Workspace/Shared/code.py", "recursive": "false"} |
Bash shell comando | %sh curl http://<address>/text.zip -o /Workspace/Users/<user-folder>/text.zip |
biblioteca instala | %pip install /Workspace/Users/<user-folder>/my_library.whl |
Pandas | df = pd.read_csv('/Workspace/Users/<user-folder>/data.csv') |
OSS Python | os.listdir('/Workspace/Users/<user-folder>/path/to/directory') |
O esquema file:/
é necessário ao trabalhar com Databricks utilidades, Apache Spark, ou SQL.
Para conhecer as limitações do trabalho com arquivos workspace, consulte Limitações.
Para onde vão os arquivos excluídos do workspace?
A exclusão de um arquivo workspace o envia para a lixeira. Você pode recuperar ou excluir permanentemente arquivos da lixeira usando a interface do usuário.
Consulte Excluir um objeto.
Trabalhe com arquivos no armazenamento de objetos na nuvem
A Databricks recomenda o uso de volumes do Unity Catalog para configurar o acesso seguro a arquivos no armazenamento de objetos na nuvem. Você deve configurar as permissões se optar por acessar diretamente os dados no armazenamento de objetos na nuvem usando URIs. Consulte gerenciar locais externos, tabelas externas e volumes externos.
Os exemplos a seguir usam URIs para acessar dados no armazenamento de objetos na nuvem:
Ferramenta | Exemplo |
---|---|
Apache Spark | spark.read.format("json").load("s3://<bucket>/path/file.json").show() |
Spark SQL e Databricks SQL | SELECT * FROM csv.`s3://<bucket>/path/file.json`; LIST 's3://<bucket>/path'; |
Databricks utilidades do sistema de arquivos | dbutils.fs.ls("s3://<bucket>/path/") %fs ls s3://<bucket>/path/ |
CLI do Databricks | Não suportado |
API REST da Databricks | Não suportado |
Bash shell comando | Não suportado |
biblioteca instala | %pip install s3://bucket-name/path/to/library.whl |
Pandas | Não suportado |
OSS Python | Não suportado |
O armazenamento de objetos na nuvem não oferece suporte a montagens do Amazon S3 com a criptografia do lado do cliente ativada.
Trabalhe com arquivos em DBFS mounts e DBFS root
As montagens DBFS não podem ser protegidas usando o Unity Catalog e não são mais recomendadas pela Databricks. Os dados armazenados no site DBFS root podem ser acessados por todos os usuários no site workspace. Databricks O senhor não recomenda o armazenamento de códigos ou dados confidenciais ou de produção no site DBFS root. Consulte O que é DBFS?
Ferramenta | Exemplo |
---|---|
Apache Spark | spark.read.format("json").load("/mnt/path/to/data.json").show() |
Spark SQL e Databricks SQL | SELECT * FROM json.`/mnt/path/to/data.json`; |
Databricks utilidades do sistema de arquivos | dbutils.fs.ls("/mnt/path") %fs ls /mnt/path |
CLI do Databricks | databricks fs cp dbfs:/mnt/path/to/remote/file /path/to/local/file |
API REST da Databricks | POST https://<host>/api/2.0/dbfs/delete --data '{ "path": "/tmp/HelloWorld.txt" }' |
Bash shell comando | %sh curl http://<address>/text.zip > /dbfs/mnt/tmp/text.zip |
biblioteca instala | %pip install /dbfs/mnt/path/to/my_library.whl |
Pandas | df = pd.read_csv('/dbfs/mnt/path/to/data.csv') |
OSS Python | os.listdir('/dbfs/mnt/path/to/directory') |
O esquema dbfs:/
é necessário ao trabalhar com a CLI do Databricks.
Trabalhe com arquivos no armazenamento temporário anexado ao nó do driver
O armazenamento efêmero anexado ao nó do driver é um armazenamento em bloco com acesso integrado ao caminho baseado em POSIX. Todos os dados armazenados nesse local desaparecem quando um clustering é encerrado ou reiniciado.
Ferramenta | Exemplo |
---|---|
Apache Spark | Não suportado |
Spark SQL e Databricks SQL | Não suportado |
Databricks utilidades do sistema de arquivos | dbutils.fs.ls("file:/path") %fs ls file:/path |
CLI do Databricks | Não suportado |
API REST da Databricks | Não suportado |
Bash shell comando | %sh curl http://<address>/text.zip > /tmp/text.zip |
biblioteca instala | Não suportado |
Pandas | df = pd.read_csv('/path/to/data.csv') |
OSS Python | os.listdir('/path/to/directory') |
O esquema file:/
é necessário ao trabalhar com Databricks utilidades.
Mova dados do armazenamento efêmero para volumes
O senhor pode querer acessar downloads de dados ou salvos em armazenamento efêmero usando Apache Spark. Como o armazenamento efêmero é anexado ao driver e o Spark é um mecanismo de processamento distribuído, nem todas as operações podem acessar diretamente os dados aqui. Suponha que o senhor precise mover dados do sistema de arquivos do driver para volumes do Unity Catalog. Nesse caso, o senhor pode copiar arquivos usando o magic comando ou o Databricks utilidades, como nos exemplos a seguir:
dbutils.fs.cp ("file:/<path>", "/Volumes/<catalog>/<schema>/<volume>/<path>")
%sh cp /<path> /Volumes/<catalog>/<schema>/<volume>/<path>
%fs cp file:/<path> /Volumes/<catalog>/<schema>/<volume>/<path>
Recurso adicional
Para obter informações sobre o upload de arquivos locais ou downloads de arquivos da Internet para Databricks, consulte upload files to Databricks.