Use valores de tarea para pasar información entre tareas

Los valores de tarea hacen referencia a la subutilidad de utilidades taskValues de Databricks, que permite pasar valores arbitrarios entre tareas de un trabajo de Databricks. Consulte Utilidad secundaria taskValues (dbutils.jobs.taskValues).

Especifique un par clave-valor mediante dbutils.jobs.taskValues.set() en una tarea y, a continuación, puede usar el nombre y la clave de la tarea para hacer referencia al valor en las tareas posteriores.

Nota:

Dado que dbutils.jobs.taskValues.set() y dbutils.jobs.taskValues.get() en la subutilidad de dbutils.jobs.taskValues son funciones de Python, solo se pueden usar en cuadernos con Python seleccionado como lenguaje. Sin embargo, puede hacer referencia a valores de tarea mediante referencias de valor dinámico para todas las tareas que admiten parámetros. Consulte Valores de referencia de la tarea.

Definir los valores de tarea

Establezca valores de tarea en cuadernos de Python mediante dbutils.jobs.taskValues.set().

Las claves de los valores de tarea deben ser cadenas. Cada clave debe ser única si tiene varios valores de tarea definidos en un cuaderno.

Puede asignar manualmente o mediante programación valores de tarea a claves. Solo se permiten los valores que se pueden expresar como JSON válidos. El tamaño de la representación JSON del valor no puede superar los 48 KiB.

Por ejemplo, en el ejemplo siguiente se establece una cadena estática para la clave fave_food:

dbutils.jobs.taskValues.set(key = "fave_food", value = "beans")

El siguiente ejemplo utiliza un parámetro de tarea de notebook para consultar todos los registros de actualización de una reserva concreta y devolver el estado actual de la reserva y el recuento total de registros:

from pyspark.sql.functions import col

dbutils.widgets.text("booking_id", "51567", "Booking ID")
booking_id = dbutils.widgets.get("booking_id")

query = (spark.read.table("samples.wanderbricks.booking_updates")
  .orderBy(col("updated_at"), ascending=False)
  .where(col("booking_id") == booking_id)
  .select(col("status"))
)

dbutils.jobs.taskValues.set(key = "record_count", value = query.count())
dbutils.jobs.taskValues.set(key = "booking_status", value = query.take(1)[0][0])

Puedes pasar listas de valores usando este patrón y luego usarlas para coordinar la lógica posterior, como For each tareas. Consulte Uso de una For each tarea para ejecutar otra tarea en un bucle.

El siguiente ejemplo extrae los valores distintos para el ID de destino a una lista de Python y establece esto como valor de tarea:

dest_list = list(spark.read.table("samples.wanderbricks.properties").select("destination_id").distinct().toPandas()["destination_id"])

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

Valores de referencia de la tarea

Databricks recomienda referenciar los valores de tarea como parámetros de tarea configurados mediante el patrón de referencias dinámicas {{tasks.<task_name>.values.<value_name>}}.

Por ejemplo, para hacer referencia al valor de tarea con la clave dest_list a partir de una tarea denominada destination_lookup, use la sintaxis {{tasks.destination_lookup.values.dest_list}}.

Consulte Configuración de parámetros de tarea y referencias de valores dinámicos.

Utilice dbutils.jobs.taskValues.get

La sintaxis dbutils.jobs.taskValues.get() requiere especificar el nombre de la tarea ascendente. No se recomienda esta sintaxis, ya que se pueden usar valores de las tareas en varias tareas posteriores, lo que significa que son necesarias numerosas actualizaciones si cambia el nombre de una tarea.

Con esta sintaxis, puede especificar opcionalmente un valor default y un debugValue. El valor predeterminado se usa si no se encuentra la clave. debugValue le permite establecer un valor estático que se usará durante el desarrollo manual de código y las pruebas en cuadernos antes de programar el cuaderno como una tarea.

En el ejemplo siguiente se obtiene el valor de la clave booking_status establecida en un nombre de tarea booking_lookup. El valor confirmed solo se devuelve cuando se ejecuta el cuaderno de forma interactiva.

booking_status = dbutils.jobs.taskValues.get(taskKey = "booking_lookup", key = "booking_status", debugValue = "confirmed")

Nota:

Databricks no recomienda establecer valores predeterminados, ya que pueden ser difíciles de solucionar y evitar mensajes de error esperados debido a que faltan claves o tareas con nombres incorrectos.

Leer valores de las iteraciones de una For each tarea

Una tarea que se ejecuta dentro de una For each task se ejecuta una vez por iteración, y cada iteración puede establecer un valor para la tarea con dbutils.jobs.taskValues.set(), como en cualquier otra tarea. Una tarea posterior puede leer el valor de cada iteración de una única lista devuelta, ordenada por índice de iteración.

Importante

La lectura de los resultados agregados de las iteraciones de una tarea For each está en fase beta. Está habilitado por defecto y requiere Databricks Runtime 15.4 LTS o superior en computación clásica.

En computación sin servidor, dbutils.jobs.taskValues.get requiere la versión 5 del entorno o superior. En las versiones del entorno 1 a 4, solo devuelve el valor de la primera iteración en lugar de la lista, y puede generar un TypeError. Las referencias de valor dinámico devuelven la lista completa en cualquier ejecución.

En cualquiera de las superficies de lectura, utiliza la clave de la tarea anidada que se ejecuta dentro de la tarea For each, no la propia tarea For each. Su clave devuelve los valores de cada iteración como una única lista ordenada por índice de iteración. Por ejemplo, si tres iteraciones de una tarea anidada llamada process establecen cada una result:

results = dbutils.jobs.taskValues.get(taskKey = "process", key = "result")
# results == [1, 2, 3]

La referencia de valor dinámico {{tasks.process.values.result}} se resuelve en la misma matriz.

Una iteración que no estableció la clave mantiene su posición en el resultado: aparece como None (JSON null) desde dbutils.jobs.taskValues.get, y como a null en una referencia de valor dinámico. Por ejemplo, si la segunda de tres iteraciones no estableció result, results es [1, None, 3].

Las referencias agregadas tienen dos límites: un array ensamblado no puede superar aproximadamente 48 KB (49.344 caracteres) para un solo valor de parámetro, y un solo valor de parámetro puede contener como máximo tres referencias agregadas de valor de tarea.

Ver los valores de la tarea

El valor devuelto de un valor de tarea en cada ejecución se muestra en el panel Salida de Detalles de la ejecución de la tarea. Para obtener más información, consulte Visualización del historial de ejecución de tareas.