Fala pessoal, continuando no ritmo de compartilhar algumas dicas que uso no meu dia a dia, hoje vou mostrar uma opção para você parametrizar seus notebooks de forma prática, lembrando que é mais uma possibilidade para o seu leque de ferramentas.
Não vou entrar em detalhes sobre notebooks, se você quiser saber mais sobre notebooks Databricks da uma olhada nesse link:
É comum que a maioria dos notebooks tenha variáveis de configuração para deixar seu código mais dinâmico, se você não está usando variáveis "algo de errado não está certo" rs, mas de fato, já vi muito código com valores fixados ou "chumbados" isso deixa o código muito engessado e pouco usual, então as variáveis são muito uteis por isso, no caso de hoje vou mostrar algumas variáveis interessantes para ter no notebook e como você pode preencher elas de forma dinâmica usando Widgets.
Widgets é um recurso sensacional que permite você enviar parâmetros para execução do seu notebook, muito útil para você agendar e orquestrar seus notebooks via Workflow ou outras ferramentas externas como Azure Data Factory ou Airflow, logo, você pode chamar um notebook enviando parâmetros de entrada.
Se quiser saber como usar e as opções além da documentação você pode usar o comando abaixo:
dbutils.widgets.help()
Vamos olhar uma caso mais prático para começar a concretizar isso.
Exemplo bem simplista, estou definindo uma função em python chamada getDirContent() e chamando ela informando um valor fixo.
Mas, agora eu quero receber esse valor de um parâmetro que será informado na chamada do notebook, ai que entra o Widget e a brincadeira começa ficar legal, diz aí como você faria? Bom vou mostrar o meu jeito, mas reforçando que é apenas mais uma forma, quando falamos de código sabemos que tem desenvolvedores que tem ticks até com espaço rs, então adapte da maneira que for conveniente.
Uma coisa legal dos Widgets que também possui uma parte visual, o que nos facilita testar valores diferentes, debugar códigos alterando parâmetros com mais facilidade.
Olha que maneiro, ele aparece visualmente no notebook e podemos alterar os valores para as execuções do notebook.
Criei mais alguns Widgets, incluindo um DropDown chamado Debug com valores True ou False.
Note que estou passando valores por default, mas você pode criar em branco e preencher em tempo de execução.
Variável Debug, ah como eu gosto dessa variável.
Um ponto importante, você não precisa declarar previamente seus Widgets, na chamada do notebook você pode enviar parâmetros e serão criados em tempo de execução.
Exemplo, no Databricks Workflow, na hora de agendar seu notebook você pode criar novos parâmetros, eles irão virar Widgets em tempo de execução.
Mas, eu prefiro já definir os Widgets para evitar alguns erros, então já deixo todos definidos e já passando os valores para as variáveis, a fim de facilitar a utilização, mesmo que o Widget não seja enviado, não tomaremos erro, pois, já foi declarado.
Exemplo de erro se você tentar usar um Widget que não existe ainda:
Então, eu já deixo dessa maneira:
Sobre a variável Debug, gosto muito de ter ela em todos meus notebooks, pois, quando precisamos depurar os notebooks, posso apenas setar ela para True e rodar o notebook apenas soltando os prints ao invés de executar, estilo um WhatIf.
Já dei um bom exemplo da variável Debug e WhatIF nesse post:
Nesse exemplo eu checo se a variável Debug esta com valor True, valor herdado do Widget, sendo True eu mostro o resultado na tela.
Aqui é apenas um exemplo para aguçar a sua imaginação, tenho certeza que você já pensou em várias utilidades aí.
Essa é uma versão de como ficaria meu notebook, note que deixei todos os Widgets com valor em branco, estou preenchendo eles na parte visual.
Outra coisa bem legal, se você clicar em Schedule ele já vai identificar seus Widgets e sugerir como parâmetro do Job.
Lembrando que você pode enviar esses parâmetros com qualquer ferramenta de orquestração como Azure Data Factory ou Airflow.
Se você quiser limpar os Widgets do notebook:
dbutils.widgets.removeAll()
Aqui um exemplo de um notebook que uso nos ambientes:
Também tento manter uma documentação de cada Widget no formato markdown ou dentro da ferramenta de CICD, ou WIKI.
E por fim, no agendamento dos meus notebooks passo as parametrizações finais dependendo do ambiente, assim consigo trocar facilmente o valor para as execuções sem precisar alterar o notebook.
Outra dica, geralmente adiciono nos notebooks um print de todas as variáveis de controle no início do notebook, mais uma vez, isso ajuda muito em cenários de Debug e investigação de problemas, fico grato quando os desenvolvedores e engenheiros fazem isso rs.
Um caso onde isso é muito útil:
Ambientes com alto controle dos códigos de notebooks, exemplo dentro de ambientes com esteiras de CICD, você não pode sair alterando o código do Notebook, então usando variáveis de controle e Widgets pode te permitir executar notebooks informando valores diferentes para cada execução sem precisar alterar o notebook, muito útil para casos em que você precisa depurar notebooks.
É isso pessoal, mais uma vez reforçando que esse modo de utilização é bem particular de cada um, estou mostrando uma nova possibilidade e opções e você pode adaptar no seu mundo.
Espero que essa dica te ajude.
Link Github:
Fique bem e até a próxima.
Comments