Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
notebookutils.fs fornece utilitários para trabalhar com vários sistemas de ficheiros, incluindo Azure Data Lake Storage (ADLS) Gen2 e Azure Blob Storage. Certifique-se de configurar o acesso ao Azure Data Lake Storage Gen2 e ao Armazenamento Blob do Azure adequadamente.
Execute os seguintes comandos para obter uma visão geral dos métodos disponíveis:
notebookutils.fs.help()
A tabela seguinte lista os métodos disponíveis no sistema de ficheiros:
| 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 dado se este não existir, criando também quaisquer diretórios pais necessários. |
cp |
cp(src: String, dest: String, recurse: Boolean = false): Boolean |
Copia um ficheiro ou diretório, possivelmente entre sistemas de ficheiros. |
fastcp |
fastcp(src: String, dest: String, recurse: Boolean = true, extraConfigs: Map = None): Boolean |
Copia um ficheiro ou diretório via azcopy para melhor desempenho com volumes de dados grandes. |
mv |
mv(src: String, dest: String, create_path: Boolean, overwrite: Boolean = false): Boolean |
Move um ficheiro ou diretório, possivelmente entre sistemas de ficheiros. |
put |
put(file: String, content: String, overwrite: Boolean = false): Boolean |
Grava a cadeia de caracteres fornecida em um arquivo, codificado em UTF-8. |
head |
head(file: String, max_bytes: int = 1024 * 100): String |
Retorna até os primeiros max_bytes bytes do ficheiro dado como um String codificado em UTF-8. |
append |
append(file: String, content: String, createFileIfNotExists: Boolean = false): Boolean |
Acrescenta o conteúdo a um ficheiro. |
rm |
rm(path: String, recurse: Boolean = false): Boolean |
Remove um ficheiro ou diretório. |
exists |
exists(path: String): Boolean |
Verifica se existe um ficheiro ou diretório. |
getProperties |
getProperties(path: String): Map |
Obtém as propriedades do caminho dado. Disponível apenas em notebooks Python (não suportado em PySpark, Scala ou R). |
Observação
Todos os métodos do sistema de ficheiros estão disponíveis em cadernos Python, PySpark, Scala e R, salvo indicação em contrário. O Scala usa nomes de parâmetros camelCase (por exemplo, createPath em vez de create_path, maxBytes em vez de max_bytes).
Para operações de montagem e desmontagem, veja Montar e desmontar Ficheiros.
Observação
Tenha em mente as seguintes restrições e considerações ao trabalhar com notebookutils.fs:
-
O comportamento dos caminhos varia consoante o tipo de caderno: Nos cadernos Spark, os caminhos relativos resolvem-se para o caminho ABFSS padrão do Lakehouse. Em cadernos Python, os caminhos relativos resolvem-se para o diretório de trabalho do sistema de ficheiros local (
/home/trusted-service-user/work). -
Limitações de escrita concorrente:
notebookutils.fs.append()enotebookutils.fs.put()não suportam escritas concorrentes no mesmo ficheiro devido à falta de garantias de atomicidade. -
Adicionar atraso de loop: Ao usar
notebookutils.fs.append()em loops, adicione 0,5-1 segundo de pausa entre escritas para garantir a integridade dos dados. -
Limitações de atalhos 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 suporta copiar ficheiros no OneLake entre regiões. Utilizecp()em substituição. - Versão em tempo de execução: O NotebookUtils foi concebido para funcionar com o Spark 3.4 (Runtime v1.2) e versões posteriores.
-
cp()comportamento em cadernos Python: Nos cadernos Python,cp()internamente usa o mesmo mecanismo baseado em azcopy quefastcp(), pelo que ambos os métodos comportam-se de forma idêntica.
O NotebookUtils funciona com o sistema de arquivos da mesma forma que as APIs do Spark. Use notebookutils.fs.mkdirs() e Lakehouse como exemplo de uso:
| Utilização | Caminho relativo da raiz HDFS | Caminho absoluto para o sistema de arquivos ABFS | Caminho absoluto para o sistema de arquivos local no nó controlador |
|---|---|---|---|
| Lakehouse não padrão | Não suportado | notebookutils.fs.mkdirs("abfss://<container_name>@<storage_account_name>.dfs.core.windows.net/<new_dir>") |
notebookutils.fs.mkdirs("file:/<new_dir>") |
| Casa do Lago Padrão | Diretório em 'Ficheiros' 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>") |
No Lakehouse padrão, os caminhos dos ficheiros são montados no notebook com um tempo de espera de cache de ficheiros de 120 segundos. Isto significa que os ficheiros ficam armazenados em cache na pasta temporária local do caderno durante 120 segundos, mesmo que sejam removidos do Lakehouse. Se quiseres alterar a regra do timeout, podes desmontar os caminhos de ficheiros padrão do Lakehouse e montá-los novamente com um valor diferente
fileCacheTimeout.Para configurações Lakehouse não padrão, 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 no servidor Lakehouse.
Listar ficheiros
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 comporta-se de forma diferente quando se utiliza um caminho relativo, dependendo do tipo de caderno.
Num caderno do Spark: O caminho relativo refere-se 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")Num caderno Python: O caminho relativo é relativo ao diretório de trabalho do sistema de ficheiros local, que por defeito é
/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")
Ver propriedades do ficheiro
Use notebookutils.fs.ls() para inspecionar propriedades do ficheiro como nome do ficheiro, caminho do ficheiro, tamanho do ficheiro e se um item é um ficheiro 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)
Usa f-strings se quiseres 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 novo diretório
Cria um diretório caso não exista, incluindo quaisquer diretórios pais 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 ficheiro
Copie um ficheiro ou diretório entre sistemas de ficheiros. Definir recurse=True para copiar diretórios recursivamente.
notebookutils.fs.cp('source file or directory', 'destination file or directory', recurse=True)
Observação
Nota do caderno Python: Nos cadernos Python, cp() internamente utiliza o mesmo mecanismo baseado em azcopy que fastcp(), proporcionando desempenho eficiente para ambos os métodos.
Devido às limitações do atalho OneLake, quando precisas notebookutils.fs.cp() de copiar dados de atalhos do tipo S3/GCS, recomenda-se usar um caminho montado em vez de um caminho abfss.
Sugestão
Verifique sempre o valor de retorno booleano para verificar se a operação teve sucesso. Use notebookutils.fs.exists() para verificar o caminho de origem antes de iniciar uma operação de cópia.
O exemplo seguinte mostra uma cópia entre armazenamentos do Lakehouse padrão para uma conta ADLS Gen2.
notebookutils.fs.cp(
"Files/local_data",
"abfss://<container>@<account>.dfs.core.windows.net/remote_data",
recurse=True
)
Cópia de ficheiro eficiente
Use fastcp para operações de cópia mais eficientes, especialmente com volumes de dados grandes. O recurse parâmetro é definido para True.
notebookutils.fs.fastcp('source file or directory', 'destination file or directory', recurse=True)
Sugestão
Use fastcp() em vez de cp() para grandes transferências de dados. O método fastcp utiliza azcopy nos bastidores, o que proporciona um throughput significativamente melhor para operações massivas de ficheiros. Em cadernos Python, ambos cp() e fastcp() usam o mesmo mecanismo subjacente.
Tenha estas considerações em mente:
-
notebookutils.fs.fastcp()não suporta copiar ficheiros no OneLake entre regiões. Neste caso, você pode usarnotebookutils.fs.cp()em vez disso. - Devido às limitações do atalho OneLake, quando você precisar
notebookutils.fs.fastcp()de copiar dados de atalhos do tipo S3/GCS, recomenda-se usar um caminho montado em vez de um caminho abfss.
Visualizar conteúdo do arquivo
Retorne até aos primeiros max_bytes bytes de um ficheiro como uma string UTF-8.
notebookutils.fs.head('file path', max_bytes)
Sugestão
Para ficheiros 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 seguinte lê os primeiros 1.000 bytes de um ficheiro:
content = notebookutils.fs.head("Files/data/sample.txt", 1000)
print(content)
Observação
O valor padrão para max_bytes varia entre linguagens: os notebooks Python e Scala usam 102400 (100 KB), enquanto os notebooks R usam 65535 (64 KB). Em Scala, este parâmetro é chamado maxBytes.
Mover o ficheiro
Mover um ficheiro ou diretório entre sistemas de ficheiros.
notebookutils.fs.mv('source file or directory', 'destination directory', create_path=True, overwrite=True)
Importante
O create_path parâmetro predefinido varia consoante o tempo de execução.
-
Spark notebooks (PySpark, Scala, R): por padrão
False(falseem Scala,FALSEem R). O diretório pai deve existir antes da operação de movimentação. -
Cadernos Python: o padrão é
True. O diretório principal é criado automaticamente se não existir.
Para garantir um comportamento consistente em tempos de execução, defina explicitamente o create_path parâmetro no seu código. Em Scala, este parâmetro é chamado createPath.
Use parâmetros nomeados se quiser código mais claro:
notebookutils.fs.mv("Files/source.csv", "Files/new_folder/dest.csv", create_path=True, overwrite=True)
Gravar arquivo
Escreve uma string UTF-8 num ficheiro.
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 ficheiro
Adicione uma cadeia UTF-8 a um ficheiro.
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 a escrita simultânea no mesmo ficheiro devido à falta de garantias de atomicidade.
Ao usar a notebookutils.fs.append API num for ciclo para escrever no mesmo ficheiro, adicione uma sleep instrução de cerca de 0,5 a 1 segundo entre as escritas 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. Definir recurse=True para remover diretórios recursivamente.
notebookutils.fs.rm('file path', recurse=True)
Verifique se existe um ficheiro ou diretório
Verifique se existe um ficheiro ou diretório no caminho especificado. Devolve True se o caminho existir; caso contrário, devolve False.
notebookutils.fs.exists("Files/data/input.csv")
Sugestão
Use exists() antes de realizar operações de ficheiro para evitar erros. Por exemplo, verifique se existe um ficheiro fonte 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
Obtém propriedades para um caminho como um mapa de pares nome-valor. Só é suportado para os caminhos do Azure Blob Storage.
Observação
O getProperties método está disponível apenas em cadernos Python. Não é suportado em notebooks Spark (PySpark, Scala ou R).
Parâmetros:
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
path |
Cordão | Sim | Caminho ABFS até ao ficheiro ou diretório. |
Retornos: Um dicionário (mapa) contendo propriedades de metadados como tamanho do ficheiro, hora 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)