Pular para o conteúdo principal

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
important

Algumas operações em Databricks, especialmente aquelas que usam Java ou Scala biblioteca, são executadas como processos JVM, por exemplo:

  • Especificar uma dependência de arquivo JAR usando --jars nas configurações do Spark
  • Chamando cat ou java.io.File em Scala Notebook
  • Fonte de dados personalizada, como spark.read.format("com.mycompany.datasource")
  • biblioteca que carregam arquivos usando Java's FileInputStream ou Paths.get()

Essas operações não suportam a leitura ou gravação em volumes Unity Catalog ou arquivos workspace usando caminhos de arquivo padrão, como /Volumes/my-catalog/my-schema/my-volume/my-file.csv. Se o senhor precisar acessar arquivos de volume ou arquivos workspace de dependências JAR ou de uma biblioteca baseada em JVM, copie os arquivos primeiro para o armazenamento local compute usando o comando Python ou %sh, como %sh mv.. Não use %fs e dbutils.fs que usam a JVM. Para acessar arquivos já copiados localmente, use o comando específico do idioma, como Python shutil ou use %sh comando. 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.

    Diagrama de caminhos URI

  • 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.

    Diagrama de caminhos POSIX

nota

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.

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 oferece suporte a FUSE para volumes Unity Catalog e arquivos workspace, exceto para subprocessos originados de Scala, como o comando Scala "cat /Volumes/path/to/file".!!.

Trabalhar com arquivos em volumes do Unity Catalog

Databricks recomenda o uso de volumes Unity Catalog para configurar o acesso a arquivos de dados não tabulares armazenados no armazenamento de objetos cloud. Para obter a documentação completa sobre o gerenciamento de arquivos em volumes, incluindo instruções detalhadas e práticas recomendadas, consulte Trabalhar com arquivos em volumes do Unity Catalog.

Os exemplos a seguir mostram operações comuns usando diferentes ferramentas e interfaces:

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')

Para obter informações sobre limitações de volumes e soluções alternativas, consulte Limitações do trabalho com arquivos em volumes.

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')

nota

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 dados diretamente no armazenamento de objetos na nuvem usando URIs. Consulte gerenciar 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("gs://<bucket>/path/file.json").show()

Spark SQL e Databricks SQL

SELECT * FROM csv.`gs://<bucket>/path/file.json`; LIST 'gs://<bucket>/path';

Databricks utilidades do sistema de arquivos

dbutils.fs.ls("gs://<bucket>/path/") %fs ls gs://<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 gs://bucket-name/path/to/library.whl

Pandas

Não suportado

OSS Python

Não suportado

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')

nota

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')

nota

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:

Python
dbutils.fs.cp ("file:/<path>", "/Volumes/<catalog>/<schema>/<volume>/<path>")
Bash
%sh cp /<path> /Volumes/<catalog>/<schema>/<volume>/<path>
Bash
%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.