작업 값은 Databricks 유틸리티 taskValues 하위 기능을 참조하며, 이를 통해 Databricks 작업의 태스크 간에 임의의 값을 전달할 수 있습니다.
taskValues 하위 유틸리티(dbutils.jobs.taskValues)를 참조하세요.
한 작업에서 dbutils.jobs.taskValues.set()을 사용하여 키-값 쌍을 지정한 다음 작업 이름과 키를 사용하여 후속 작업의 값을 참조할 수 있습니다.
참고
dbutils.jobs.taskValues.set() 하위 기능의 dbutils.jobs.taskValues.get() 및 dbutils.jobs.taskValues Python 함수이므로 Python이 언어로 선택된 Notebook에서만 사용할 수 있습니다. 그러나 매개 변수를 지원하는 모든 작업에 대해 동적 값 참조를 사용하여 작업 값을 참조할 수 있습니다.
참조 작업 값을 보세요.
작업 값 설정
Python Notebook에서 dbutils.jobs.taskValues.set()를 사용하여 태스크 값을 설정합니다.
작업 값 키는 문자열이어야 합니다. Notebook에 정의된 작업 값이 여러 개 있는 경우 각 키는 고유해야 합니다.
수동으로 또는 프로그래밍 방식으로 키에 작업 값을 할당할 수 있습니다. 유효한 JSON으로 표현할 수 있는 값만 허용됩니다. 값의 JSON 표현 크기는 48KiB를 초과할 수 없습니다.
예를 들어 다음 예제에서는 키 fave_food에 대한 정적 문자열을 설정합니다.
dbutils.jobs.taskValues.set(key = "fave_food", value = "beans")
다음 예시는 노트북 작업 매개변수를 사용하여 특정 예약의 모든 업데이트 레코드를 조회하고 현재 예약 상태와 총 레코드 수를 반환합니다:
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])
이 패턴을 이용해 값 목록을 전달한 후, 작업 같은 For each 후속 로직을 조정하는 데 사용할 수 있습니다.
For each 작업을 루프에서 다른 작업을 실행하는 데 사용하는 방법을 참조하세요.
다음 예시는 목적지 ID의 서로 다른 값들을 Python 리스트로 추출하여 작업 값으로 설정합니다:
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)
참조 작업 값
Databricks는 동적 값 참조 패턴 {{tasks.<task_name>.values.<value_name>}}사용하여 구성된 작업 매개 변수로 작업 값을 참조하는 것이 좋습니다.
예를 들어 이름이 dest_list인 작업의 키 destination_lookup로 작업 값을 참조하려면 {{tasks.destination_lookup.values.dest_list}} 구문을 사용합니다.
dbutils.jobs.taskValues.get 사용
dbutils.jobs.taskValues.get() 구문에는 업스트림 작업 이름을 지정해야 합니다. 여러 다운스트림 작업에서 작업 값을 사용할 수 있으므로 이 구문은 권장되지 않습니다. 즉, 작업 이름이 변경될 경우 수많은 업데이트가 필요합니다.
이 구문을 사용하여 필요에 따라 default 값과 debugValue를 지정할 수 있습니다. 키를 찾을 수 없는 경우 기본값이 사용됩니다. 이 debugValue는 노트북을 작업으로 예약하기 전에 노트북에서 수동으로 코드 개발 및 테스트에 사용할 정적 값을 설정할 수 있도록 합니다.
다음 예제에서는 작업 이름 booking_status설정된 키 booking_lookup 값을 가져옵니다.
confirmed 값은 대화형으로 Notebook을 실행하는 경우에만 반환됩니다.
booking_status = dbutils.jobs.taskValues.get(taskKey = "booking_lookup", key = "booking_status", debugValue = "confirmed")
참고
Databricks는 키 누락 또는 잘못 명명된 작업으로 인해 예상되는 오류 메시지의 문제를 해결하고 방지하기 어려울 수 있으므로 기본값을 설정하지 않는 것이 좋습니다.
작업 반복에서 For each 값을 읽습니다
For each task 내에서 실행되는 작업은 각 반복마다 한 번 실행되며, 각 반복은 다른 작업과 마찬가지로 dbutils.jobs.taskValues.set()를 사용해 작업 값을 설정할 수 있습니다. 하위 작업은 반복 인덱스 순서로 정렬된 단일 반환 목록에서 각 반복 값을 읽을 수 있습니다.
Important
For each 작업의 집계된 반복 출력값 읽기는 베타 버전입니다. 기본적으로 활성화되어 있으며, 클래식 컴퓨트에서는 Databricks Runtime 15.4 LTS 이상이 필요합니다.
서버리스 컴퓨트에서는 dbutils.jobs.taskValues.get환경 버전 5 이상이 필요합니다. 환경 버전 1부터 4까지에서는 리스트 대신 첫 번째 반복의 값만 반환하며, TypeError 예외를 발생시킬 수 있습니다. 동적 값 참조는 어떤 계산에서도 전체 목록을 반환합니다.
읽기 측면 중 어느 쪽에서든 For each 작업 내부에서 실행되는 중첩 작업의 키를 사용하고, For each 작업 자체의 키는 사용하지 마세요. 키는 각 반복의 값을 반복 인덱스 순서로 정렬한 단일 리스트로 반환합니다. 예를 들어, process라는 중첩 작업의 세 번의 반복 실행이 각각 result를 설정하는 경우:
results = dbutils.jobs.taskValues.get(taskKey = "process", key = "result")
# results == [1, 2, 3]
동적 값 참조 {{tasks.process.values.result}} 는 동일한 배열로 해결됩니다.
키를 설정하지 않은 반복은 결과에서 그 위치를 유지합니다: (JSON null)로 Nonedbutils.jobs.taskValues.get, 동적 값 참조에서는 a null 로 나타납니다. 예를 들어, 세 번의 반복 중 두 번째 반복에서 result을 설정하지 않은 경우 results은 [1, None, 3]입니다.
집계된 참조에는 두 가지 한계가 있습니다: 어셈블된 배열은 단일 매개변수 값에 대해 약 48 KB(49,344자)를 초과할 수 없고, 단일 매개변수 값은 최대 세 개의 집계된 작업 값 참조를 포함할 수 있습니다.
작업 값 보기
각 실행에 대한 작업 값의 반환된 값은 작업 실행 세부 정보의출력 창에 표시됩니다. 태스크 실행 기록 보기를 참조하세요.