Trabalhar com arquivos no Databricks

Databricks fornece múltiplas russas e APIs para interagir com arquivos nos seguintes locais:

  • Unity Catalog volumes

  • workspace arquivos

  • cloud armazenamento de objetos

  • Montagens de DBFS e DBFS root

  • Armazenamento efêmero anexado ao nó do driver do cluster

Este artigo fornece exemplos de interação com arquivos nesses locais para as seguintes ferramentas:

  • Apache Spark

  • Spark SQL e Databricks SQL

  • Utilidades do sistema de arquivos Databricks (dbutils.fs ou %fs)

  • CLI do Databricks

  • API REST Databricks

  • Comando do shell Bash (%sh)

  • NotebookA biblioteca com escopo de -instalações usando %pip

  • Pandas

  • Utilitários de processamento e gerenciamento de arquivos OSS Python

Importante

As operações de arquivo que exigem acesso FUSE aos dados não podem acessar diretamente o armazenamento de objetos clouds usando URIs. A Databricks recomenda a utilização de volumes Unity Catalog para configurar o acesso a estes locais para o FUSE.

Scala não suporta volumes FUSE for Unity Catalog ou arquivos de workspace em compute configurada com modo de acesso de usuário único ou clusters sem Unity Catalog. Scala suporta volumes FUSE for Unity Catalog e arquivos workspace em compute configurada com Unity Catalog e modo de acesso compartilhado.

Preciso fornecer um esquema de URI para acessar os dados?

Os caminhos de acesso a dados em 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 URI são opcionais para a maioria dos casos de utilização. Ao acessar dados diretamente no armazenamento de objetos clouds , você deve fornecer o esquema de URI correto para o tipo de armazenamento.

    Diagrama de caminhos URI
  • Os caminhos no estilo POSIX fornecem acesso a dados relativos à raiz do driver (/). Os caminhos no estilo POSIX nunca requerem um esquema. Você pode usar volumes do Unity Catalog ou montagens DBFS para fornecer acesso no estilo POSIX aos dados no armazenamento de objetos clouds . Muitas estruturas de ML e outros módulos OSS Python exigem FUSE e só podem usar caminhos no estilo POSIX.

    Diagrama de caminhos POSIX

Trabalhar com arquivos em volumes do Unity Catalog

A Databricks recomenda a utilização de volumes do Unity Catalog para configurar o acesso a ficheiros de dados não tabulares armazenados no armazenamento de objetos clouds . Consulte Criar e trabalhar com volumes.

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/';

Sistema de arquivos databricks russos

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 Databricks

POST https://<databricks-instance>/api/2.1/jobs/create {"name": "A multitask job", "tasks": [{..."libraries": [{"jar": "/Volumes/dev/environment/libraries/logging/Logging.jar"}],},...]}

Comando shell bash

%sh curl http://<address>/text.zip -o /Volumes/my_catalog/my_schema/my_volume/tmp/text.zip

Instalações de biblioteca

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

Observação

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 de gravação aleatória, execute primeiro as operações em um disco local e, em seguida, copie os resultados para os volumes do Unity Catalog. Por exemplo:

    # 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')
    
  • Não há suporte para arquivos esparsos. Para copiar arquivos esparsos, use cp --sparse=never:

    $ 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 do espaço de trabalho

Arquivos do Databricksworkspace são o conjunto de arquivos em um workspace que não são do Notebook. O senhor pode usar os arquivos workspace para armazenar e acessar dados e outros arquivos salvos no Notebook e em outros workspace ativos. Como os arquivos workspace têm restrições de tamanho, a Databricks recomenda armazenar apenas arquivos de dados pequenos aqui, principalmente para desenvolvimento e teste.

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`;

Sistema de arquivos databricks russos

dbutils.fs.ls("file:/Workspace/Users/<user-folder>/") %fs ls file:/Workspace/Users/<user-folder>/

CLI do Databricks

databricks workspace list

API REST Databricks

POST https://<databricks-instance>/api/2.0/workspace/delete {"path": "/Workspace/Shared/code.py", "recursive": "false"}

Comando shell bash

%sh curl http://<address>/text.zip -o /Workspace/Users/<user-folder>/text.zip

Instalações de biblioteca

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

Observação

O esquema file:/ é necessário ao trabalhar com Databricks russas, Apache Spark ou SQL.

Limitações dos arquivos do espaço de trabalho

workspace têm as seguintes limitações:

  • workspace o tamanho do arquivo é limitado a 500 MB. As operações que tentarem fazer download ou criar arquivos maiores que esse limite falharão.

  • Se o seu fluxo de trabalho usar código-fonte localizado em um repositório Git remoto, não será possível gravar no diretório atual ou usar um caminho relativo. Gravar dados em outras opções de local.

  • Você não pode usar o comando git ao salvar em arquivos workspace . A criação de diretórios .git não é permitida em arquivos workspace .

  • Há um suporte limitado para operações de arquivo workspace do serverless compute.

  • executor não pode gravar em arquivos workspace .

  • não há suporte para links simbólicos.

  • workspace os arquivos não podem ser acessados a partir de funções definidas pelo usuário (UDFs) em clusters com modo de acesso compartilhado.

Para onde vão os arquivos excluídos do workspace?

Excluir um arquivo de workspace o envia para a lixeira. Você pode recuperar ou excluir permanentemente arquivos da lixeira usando a IU.

Consulte Excluir um objeto.

Trabalhe com arquivos no armazenamento de objetos clouds

A Databricks recomenda o uso de volumes do Unity Catalog para configurar o acesso seguro a arquivos no armazenamento de objetos clouds . Se você optar por acessar diretamente os dados no armazenamento de objetos clouds usando URIs, deverá configurar permissões. Consulte gerenciamento de locais externos, tabelas externas e volumes externos.

Os exemplos a seguir usam URIs para acessar dados no armazenamento de objetos clouds :

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

Sistema de arquivos databricks russos

dbutils.fs.ls("gs://<bucket>/path/") %fs ls gs://<bucket>/path/

CLI do Databricks

Não suportado

API REST Databricks

Não suportado

Comando shell bash

Não suportado

Instalações de biblioteca

%pip install gs://bucket-name/path/to/library.whl

Pandas

Não suportado

OSS Python

Não suportado

Observação

cloud O armazenamento de objetos não é compatível com a passagem de credenciais.

Trabalhe com arquivos em montagens DBFS e DBFS root

As montagens DBFS não podem ser protegidas usando o Unity Catalog e não são mais recomendadas pelo Databricks. Os dados armazenados na DBFS root podem ser acessados por todos os usuários no workspace. A Databricks não recomenda armazenar qualquer código ou dados confidenciais ou de produção na DBFS root. Consulte O que é o sistema de arquivos Databricks (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`;

Sistema de arquivos databricks russos

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 Databricks

POST https://<host>/api/2.0/dbfs/delete --data '{ "path": "/tmp/HelloWorld.txt" }'

Comando shell bash

%sh curl http://<address>/text.zip > /dbfs/mnt/tmp/text.zip

Instalações de biblioteca

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

Observação

O esquema dbfs:/ é necessário ao trabalhar com a CLI do Databricks.

Trabalhar com arquivos em armazenamento temporário anexado ao nó do driver

O armazenamento térmico anexado ao nó do driver é um armazenamento em bloco com acesso de caminho nativo baseado em POSIX. Todos os dados armazenados nesse local desaparecem quando um cluster é encerrado ou reiniciado.

Ferramenta

Exemplo

Apache Spark

Não suportado

Spark SQL e Databricks SQL

Não suportado

Sistema de arquivos databricks russos

dbutils.fs.ls("file:/path") %fs ls file:/path

CLI do Databricks

Não suportado

API REST Databricks

Não suportado

Comando shell bash

%sh curl http://<address>/text.zip > /tmp/text.zip

Instalações de biblioteca

Não suportado

Pandas

df = pd.read_csv('/path/to/data.csv')

OSS Python

os.listdir('/path/to/directory')

Observação

O esquema file:/ é necessário ao trabalhar com Databricks russas.

Mova dados do armazenamento efêmero para volumes

O senhor pode querer acessar downloads de dados ou salvos em armazenamento efêmero usando o 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. Se o senhor precisar mover dados do sistema de arquivos do driver para volumes do Unity Catalog, poderá copiar arquivos usando o magic comando ou os utilitários do Databricks, 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>