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