top of page
Foto do escritorReginaldo Silva

(DBUTILS.FS.LS + Recursividade -> Dataframe) Transforme o resultado do Dbutils em Dataframe

Fala dataholics, hoje vou compartilhar uma dica rápida para uso diário.


Essa dica é bem legal e utilizo muito no meu dia a dia, vamos pegar um resultado da listagem de uma pasta no Storage e transformar em Dataframe, com isso podemos:

  • Ver e somar a quantidade de arquivos e tamanho das pastas (Sim daria para fazer via Storage também, porém, dependendo da ferramenta é complicado e via script podemos automatizar)

  • Tamanho total da pasta incluindo todas as sub pastas (usando recursividade)

  • Automatizar rotinas de manutenção (Em breve postarei um script maneiro, ta em reta final)


Primeiro vamos ao Dbutils.fs.ls.

O dbutils.fs.ls nos permite listar conteúdos de uma pasta, porem, ele não faz a listagem de forma recursiva, ou seja, você verá apenas os arquivos da pasta informada e não verá os arquivos dentro de subpastas, exemplo:

/pasta1

/pasta1/file.txt

/pasta1/pasta2/file.txt

/pasta1/pasta2/file2.txt


Se você fizer o dutils.fs.ls na pasta /pasta1 o retorno sera de 1 arquivo e 1 pasta, os arquivos dentro da pasta2 não serão apresentados.

Mas, continuando, vamos criar um Dataframe com esse resultado para podermos analisar com mais facilidade.


O dataframe criado na imagem acima lista a pasta /databricks-datasets/COVID/ (você conseguirá simular também, pois, esta pasta é padrão), para criar o Dataframe utilizamos a função spark.createDataFrame() e passamos uma Lista e um Schema.


Consultando o resultado com SQL (Por que não em pyhton? Porque eu prefiro SQL para consultar dados e é isso rs). Veja que temos apenas 2 arquivos, totalizando 0 MB, mas, sabemos que tem mais do que isso la dentro!


Essa é a estrutura retornada pelo Dataframe: (Todas as pastas têm size = 0)


Agora vamos falar de recursividade, como o dbutils.fs.ls não consegue fazer isso, logo precisamos usar recursividade para entrar em cada pasta e rodar um novo dbutils.fs.ls, para isso criamos uma function get_dir_content() para facilitar.

Obs: Estamos ignorando a pasta _delta_log.


Usando a function para criar o Dataframe.

Observação: Dependendo da profundidade das subpastas pode demorar um tempo, monitore!


Agora sim! Total da pasta listado com sucesso.


Espero que esse script seja útil para vocês.


Link para o Github:


Fique bem e até a próxima.

369 visualizações0 comentário

Comentarios


Post: Blog2 Post
bottom of page