Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
notebookutils.fs fornece utilitários para trabalhar com vários sistemas de arquivos, incluindo o Azure Data Lake Storage (ADLS) Gen2 e o Armazenamento de Blobs do Azure. Configure o acesso ao Azure Data Lake Storage Gen2 e ao Armazenamento de Blobs do Azure adequadamente.
Execute os seguintes comandos para obter uma visão geral dos métodos disponíveis:
notebookutils.fs.help()
A tabela a seguir lista os métodos disponíveis do sistema de arquivos:
| Método | Signature | Descrição |
|---|---|---|
ls |
ls(path: String): Array |
Lista o conteúdo de um diretório. |
mkdirs |
mkdirs(path: String): Boolean |
Cria o diretório especificado se ele não existir, criando também os diretórios pai necessários. |
cp |
cp(src: String, dest: String, recurse: Boolean = false): Boolean |
Copia um arquivo ou diretório, possivelmente entre sistemas de arquivos. |
fastcp |
fastcp(src: String, dest: String, recurse: Boolean = true, extraConfigs: Map = None): Boolean |
Copia um arquivo ou diretório por meio de azcopy para melhorar o desempenho com grandes volumes de dados. |
mv |
mv(src: String, dest: String, create_path: Boolean, overwrite: Boolean = false): Boolean |
Move um arquivo ou diretório, possivelmente entre sistemas de arquivos. |
put |
put(file: String, content: String, overwrite: Boolean = false): Boolean |
Grava a cadeia de caracteres fornecida em um arquivo, codificada em UTF-8. |
head |
head(file: String, max_bytes: int = 1024 * 100): String |
Retorna até os primeiros max_bytes bytes do arquivo especificado como uma cadeia de caracteres codificada em UTF-8. |
append |
append(file: String, content: String, createFileIfNotExists: Boolean = false): Boolean |
Acrescenta o conteúdo a um arquivo. |
rm |
rm(path: String, recurse: Boolean = false): Boolean |
Remove um arquivo ou diretório. |
exists |
exists(path: String): Boolean |
Verifica se existe um arquivo ou diretório. |
getProperties |
getProperties(path: String): Map |
Obtém as propriedades do caminho fornecido. Disponível apenas em notebooks Python (sem suporte no PySpark, Scala ou R). |
Observação
Todos os métodos do sistema de arquivos estão disponíveis em notebooks de Python, PySpark, Scala e R, salvo indicação em contrário. Scala usa nomes de parâmetro camelCase (por exemplo, createPath em vez de create_path, maxBytes em vez de max_bytes).
Para operações de montagem e desmontagem, consulte Montagem e desmontagem de arquivos.
Observação
Tenha em mente as seguintes restrições e considerações ao trabalhar com notebookutils.fs:
-
O comportamento do caminho varia por tipo de bloco de anotações: em notebooks Spark, os caminhos relativos resolvem-se para o caminho padrão do Lakehouse ABFSS. Nos notebooks Python, caminhos relativos são resolvidos em relação ao diretório de trabalho do sistema de arquivos local (
/home/trusted-service-user/work). -
Limitações de gravação simultâneas:
notebookutils.fs.append()enotebookutils.fs.put()não oferecem suporte a gravações simultâneas no mesmo arquivo devido à falta de garantias de atomicidade. -
Adicionar atraso no loop: ao usar
notebookutils.fs.append()em loops, adicione uma pausa de 0,5 a 1 segundo entre gravações para integridade dos dados. -
Limitações de atalho do OneLake: para atalhos do tipo S3/GCS, use caminhos montados em vez de caminhos ABFS para operações
cp()efastcp(). -
Limitações entre regiões:
fastcp()não dá suporte à cópia de arquivos no OneLake entre regiões. Usecp()em seu lugar. - Versão de runtime: o NotebookUtils foi projetado para funcionar com o Spark 3.4 (Runtime v1.2) e superior.
-
cp()comportamento em notebooks Python: Em notebooks Python,cp()usa internamente o mesmo mecanismo, baseado em azcopy, quefastcp(), portanto, ambos os métodos se comportam de forma idêntica.
O NotebookUtils funciona com o sistema de arquivos da mesma forma que as APIs do Spark. Tome notebookutils.fs.mkdirs() e o uso do Lakehouse como exemplo:
| Usage | Caminho relativo da raiz do HDFS | Caminho absoluto para o sistema de arquivos ABFS | Caminho absoluto para o sistema de arquivos local no nó do driver |
|---|---|---|---|
| Lakehouse não padrão | Sem suporte | notebookutils.fs.mkdirs("abfss://<container_name>@<storage_account_name>.dfs.core.windows.net/<new_dir>") |
notebookutils.fs.mkdirs("file:/<new_dir>") |
| Lakehouse padrão | Diretório em 'Arquivos' ou 'Tabelas': notebookutils.fs.mkdirs("Files/<new_dir>") |
notebookutils.fs.mkdirs("abfss://<container_name>@<storage_account_name>.dfs.core.windows.net/<new_dir>") |
notebookutils.fs.mkdirs("file:/<new_dir>") |
Para o Lakehouse padrão, os caminhos de arquivo são montados em seu notebook com um tempo limite de cache de arquivo padrão de 120 segundos. Isso significa que os arquivos são armazenados em cache na pasta temporária local do notebook por 120 segundos, mesmo que sejam removidos do Lakehouse. Se você quiser alterar a regra de tempo limite, poderá desmontar os caminhos de arquivo padrão do Lakehouse e montá-los novamente com um valor diferente
fileCacheTimeout.Para configurações não padrão do Lakehouse, você pode definir o parâmetro apropriado
fileCacheTimeoutdurante a montagem dos caminhos lakehouse. Definir o tempo limite como 0 garante que o arquivo mais recente seja buscado do servidor Lakehouse.
Listar arquivos
Para listar o conteúdo de um diretório, use notebookutils.fs.ls('Your directory path'). Por exemplo:
notebookutils.fs.ls("Files/tmp") # Relative path works with different base paths depending on notebook type
notebookutils.fs.ls("abfss://<container_name>@<storage_account_name>.dfs.core.windows.net/<path>") # Absolute path using ABFS file system
notebookutils.fs.ls("file:/tmp") # Full path of the local file system of driver node
A notebookutils.fs.ls() API se comporta de forma diferente ao usar um caminho relativo, dependendo do tipo de notebook.
Em um notebook do Spark: o caminho relativo se refere ao caminho ABFSS padrão do Lakehouse. Por exemplo,
notebookutils.fs.ls("Files")aponta para o diretórioFilesno Lakehouse padrão.Por exemplo:
notebookutils.fs.ls("Files/sample_datasets/public_holidays.parquet")Em um notebook python: o caminho relativo é relativo ao diretório de trabalho do sistema de arquivos local, que por padrão é
/home/trusted-service-user/work. Portanto, você deve usar o caminho completo em vez de um caminho relativonotebookutils.fs.ls("/lakehouse/default/Files")para acessar o diretórioFilesno Lakehouse padrão.Por exemplo:
notebookutils.fs.ls("/lakehouse/default/Files/sample_datasets/public_holidays.parquet")
Exibir propriedades de arquivo
Use notebookutils.fs.ls() para inspecionar as propriedades do arquivo, como nome do arquivo, caminho do arquivo, tamanho do arquivo e se um item é um arquivo ou diretório.
files = notebookutils.fs.ls('Your directory path')
for file in files:
print(file.name, file.isDir, file.isFile, file.path, file.size)
Use cadeias de caracteres f se desejar uma saída mais legível:
files = notebookutils.fs.ls("Files/data")
for file in files:
print(f"Name: {file.name}, Size: {file.size}, IsDir: {file.isDir}, Path: {file.path}")
Criar um diretório
Crie um diretório se ele não existir, incluindo todos os diretórios predecessores necessários.
notebookutils.fs.mkdirs('new directory name')
notebookutils.fs.mkdirs("Files/<new_dir>") # Works with the default Lakehouse files using relative path
notebookutils.fs.mkdirs("abfss://<container_name>@<storage_account_name>.dfs.core.windows.net/<new_dir>") # Based on ABFS file system
notebookutils.fs.mkdirs("file:/<new_dir>") # Based on local file system of driver node
Copiar arquivo
Copie um arquivo ou diretório entre sistemas de arquivos. Defina recurse=True para copiar diretórios recursivamente.
notebookutils.fs.cp('source file or directory', 'destination file or directory', recurse=True)
Observação
Observação do notebook Python: nos notebooks Python, cp() usa internamente o mesmo mecanismo baseado em azcopy que o fastcp(), proporcionando um desempenho eficiente para ambos os métodos.
Devido às limitações do atalho do OneLake, quando você precisa usar notebookutils.fs.cp() para copiar dados do atalho de tipo S3/GCS, é recomendável usar um caminho montado em vez de um caminho abfss.
Dica
Sempre verifique o valor retornado booliano para verificar se a operação foi bem-sucedida. Use notebookutils.fs.exists() para verificar o caminho de origem antes de iniciar uma operação de cópia.
O exemplo a seguir mostra uma cópia de armazenamento cruzado do Lakehouse padrão para uma conta do ADLS Gen2:
notebookutils.fs.cp(
"Files/local_data",
"abfss://<container>@<account>.dfs.core.windows.net/remote_data",
recurse=True
)
Arquivo de cópia com desempenho
Use fastcp para operações de cópia mais eficientes, especialmente com grandes volumes de dados. O recurse parâmetro usa Truecomo padrão .
notebookutils.fs.fastcp('source file or directory', 'destination file or directory', recurse=True)
Dica
Use fastcp() em vez de cp() para transferências de dados grandes. O método fastcp usa azcopy nos bastidores, o que proporciona uma taxa de transferência significativamente melhor para operações de arquivos em massa. Nos notebooks Python, ambos cp() e fastcp() usam o mesmo mecanismo subjacente.
Lembre-se do seguinte:
-
notebookutils.fs.fastcp()não dá suporte à cópia de arquivos no OneLake entre regiões. Nesse caso, você pode usarnotebookutils.fs.cp(). - Devido às limitações do atalho do OneLake, quando você precisa usar
notebookutils.fs.fastcp()para copiar dados do atalho de tipo S3/GCS, é recomendável usar um caminho montado em vez de um caminho abfss.
Visualizar o conteúdo do arquivo
Retorne até os primeiros max_bytes bytes de um arquivo como uma cadeia de caracteres UTF-8.
notebookutils.fs.head('file path', max_bytes)
Dica
Para arquivos grandes, use head() com um valor apropriado max_bytes para evitar problemas de memória. O valor padrão é 100 KB (1024 * 100).
O exemplo a seguir lê os primeiros 1.000 bytes de um arquivo:
content = notebookutils.fs.head("Files/data/sample.txt", 1000)
print(content)
Observação
O valor padrão de max_bytes difere entre linguagens: os notebooks Python e Scala usam 102400 (100 KB), enquanto os notebooks R usam 65535 (64 KB). No Scala, esse parâmetro é nomeado maxBytes.
Mover arquivo
Mova um arquivo ou diretório entre sistemas de arquivos.
notebookutils.fs.mv('source file or directory', 'destination directory', create_path=True, overwrite=True)
Importante
O create_path padrão do parâmetro varia de acordo com o runtime:
-
Notebooks Spark (PySpark, Scala, R): padrão é
False(falseem Scala,FALSEem R). O diretório pai deve existir antes da operação de movimentação. -
Notebooks python: padrão para
True. O diretório pai será criado automaticamente se ele não existir.
Para garantir um comportamento consistente em runtimes, defina explicitamente o create_path parâmetro em seu código. No Scala, esse parâmetro é nomeado createPath.
Use parâmetros nomeados se desejar um código mais claro:
notebookutils.fs.mv("Files/source.csv", "Files/new_folder/dest.csv", create_path=True, overwrite=True)
Gravar arquivo
Escreva uma cadeia de caracteres UTF-8 em um arquivo.
notebookutils.fs.put("file path", "content to write", True) # Set the last parameter as True to overwrite the file if it already exists
Acrescentar conteúdo a um arquivo
Acrescente uma cadeia de caracteres UTF-8 a um arquivo.
notebookutils.fs.append("file path", "content to append", True) # Set the last parameter as True to create the file if it doesn't exist
Importante
notebookutils.fs.append() e notebookutils.fs.put() não suportam escrita simultânea no mesmo arquivo devido à ausência de garantias de atomicidade.
Ao usar a notebookutils.fs.append API em um for loop para gravar no mesmo arquivo, adicione uma sleep instrução de cerca de 0,5 a 1 segundo entre as gravações recorrentes. Essa recomendação ocorre porque a operação de notebookutils.fs.append interna da API flush é assíncrona, portanto, um pequeno atraso ajuda a garantir a integridade dos dados.
import time
for i in range(100):
notebookutils.fs.append("Files/output/data.txt", f"Line {i}\n", True)
time.sleep(0.5) # Prevent data integrity issues
Excluir arquivo ou diretório
Remova um arquivo ou diretório. Defina recurse=True para remover diretórios recursivamente.
notebookutils.fs.rm('file path', recurse=True)
Verificar se existe um arquivo ou diretório
Verifique se existe um arquivo ou diretório no caminho especificado. Ele retornará True se o caminho existir; caso contrário, retornará False.
notebookutils.fs.exists("Files/data/input.csv")
Dica
Use exists() antes de executar operações de arquivo para evitar erros. Por exemplo, verifique se existe um arquivo de origem antes de tentar copiá-lo ou movê-lo.
if notebookutils.fs.exists("Files/data/input.csv"):
notebookutils.fs.cp("Files/data/input.csv", "Files/backup/input.csv")
print("File copied successfully.")
else:
print("Source file not found.")
Obter propriedades do arquivo
Obtenha as propriedades de um caminho no formato de um mapa de pares nome-valor. É compatível apenas com caminhos do Azure Blob Storage.
Observação
O getProperties método está disponível apenas em notebooks Python. Não há suporte para ele em notebooks Spark (PySpark, Scala ou R).
Parâmetros:
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
path |
String | Sim | Caminho do ABFS para o arquivo ou diretório. |
Retorna: Um dicionário (mapa) que contém propriedades de metadados, como tamanho do arquivo, tempo de criação, hora da última modificação e tipo de conteúdo.
properties = notebookutils.fs.getProperties("abfss://<container_name>@<storage_account_name>.dfs.core.windows.net/<path>")
print(properties)