Compartilhar informações entre tarefas em um trabalho do Azure Databricks

Você pode usar valores de tarefa para passar parâmetros arbitrários entre tarefas em um trabalho do Azure Databricks. Você passa valores de tarefa usando o subutilitário taskValues em Utilitários do Databricks. O subutilitário taskValues fornece uma API simples que permite que as tarefas gerem valores que podem ser referenciados em tarefas subsequentes, facilitando a criação de fluxos de trabalho mais expressivos. Por exemplo, você pode comunicar identificadores ou métricas, como informações sobre a avaliação de um modelo de machine learning, entre tarefas diferentes em uma execução de trabalho. Cada tarefa pode definir e obter vários valores de tarefa. Os valores da tarefa podem ser definidos e recuperados em notebooks Python.

Observação

Agora você pode utilizar referências de valores dinâmicos em seus notebooks para referenciar valores de tarefas definidos em tarefas upstream. Por exemplo, para referenciar o valor com a chave name definida pela tarefa Get_user_data, utilize {{tasks.Get_user_data.values.name}}. Como eles podem ser utilizados com vários tipos de tarefa, o Databricks recomenda o uso de referências de valor dinâmico em vez de dbutils.jobs.taskValues.get para recuperar o valor da tarefa programaticamente.

Usando valores de tarefa

O subutilitário taskValues fornece dois comandos: dbutils.jobs.taskValues.set() para definir uma variável e dbutils.jobs.taskValues.get() para recuperar um valor. Suponha que você tenha duas tarefas de notebook, Get_user_data e Analyze_user_data, e queira passar o nome e a idade de um usuário da tarefa Get_user_data para a tarefa Analyze_user_data. O seguinte exemplo define o nome e a idade do usuário na tarefa Get_user_data:

dbutils.jobs.taskValues.set(key = 'name', value = 'Some User')
dbutils.jobs.taskValues.set(key = "age", value = 30)
  • key é o nome da chave de valor da tarefa. Esse nome deve ser exclusivo para o trabalho.
  • value é o valor dessa chave de valor de tarefa. Esse comando deve poder representar o valor internamente no formato JSON. O tamanho da representação JSON do valor não pode exceder 48 KiB.

O seguinte exemplo obtém os valores na tarefa Analyze_user_data:

dbutils.jobs.taskValues.get(taskKey = "Get_user_data", key = "age", default = 42, debugValue = 0)
dbutils.jobs.taskValues.get(taskKey = "Get_user_data", key = "name", default = "Jane Doe")
  • taskKey é o nome da tarefa de trabalho que define o valor. Se o comando não conseguir localizar essa tarefa, um ValueError será gerado.
  • key é o nome da chave de valor da tarefa. Se o comando não puder localizar essa chave de valor de tarefa, ValueError será gerado (a menos que default seja especificado).
  • default é um valor opcional que será retornado se key não puder ser encontrado. default não pode ser None.
  • debugValue é um valor opcional que será retornado se você tentar obter o valor de tarefa de dentro de um notebook que está em execução fora de um trabalho. Isso pode ser útil durante a depuração quando você deseja executar seu notebook manualmente e retornar algum valor em vez de gerar um TypeError por padrão. debugValue não pode ser None.

Como um exemplo mais complexo de compartilhamento de contexto entre tarefas, suponha que você tenha um aplicativo que inclui vários modelos de machine learning para prever a renda de um indivíduo, considerando vários atributos pessoais, e uma tarefa que determina o melhor modelo a ser usado com base na saída das três tarefas anteriores. Os modelos são executados por três tarefas chamadas Logistic_Regression, Decision_Tree e Random_Forest, e a tarefa Best_Model determina o melhor modelo a ser usado com base na saída das três tarefas anteriores.

Graph of example classification application

A precisão de cada modelo (quão bem o classificador prevê a renda) é passada em um valor de tarefa para determinar o algoritmo com melhor desempenho. Por exemplo, o notebook de regressão logística associado à tarefa Logistic_Regression inclui o seguinte comando:

dbutils.jobs.taskValues.set(key = "model_performance", value = result)

Cada tarefa de modelo define um valor para a chave model_performance. A tarefa Best_Model lê o valor de cada tarefa e usa esse valor para determinar o modelo ideal. O seguinte exemplo lê o valor definido pela tarefa Logistic_Regression:

logistic_regression = dbutils.jobs.taskValues.get(taskKey = "Logistic_Regression", key = "model_performance")

Exibir valores de tarefa

Para exibir o valor de uma tarefa após a execução de uma tarefa, acesse o histórico de execuções de tarefas da tarefa. Os resultados do valor da tarefa são exibidos no painel Saída.