Запускать один и тот же блокнот Databricks для разных аргументов одновременно?

#pyspark #databricks

#pyspark #databricks

Вопрос:

Следующий код (не мой) способен запускать notebookaи NotebookB одновременно. Мне нужна некоторая помощь, чтобы понять, как передавать несколько аргументов в одни и те же записные книжки.

Я хочу передать этот список аргументов в каждый блокнот:

 args = {}
args["arg1"] = "some value"
args["arg2"] = "another value"
 

Если бы я хотел передать приведенные выше аргументы в каждый из запущенных ноутбуков, что мне нужно будет изменить в приведенном ниже коде?

Вот рабочий код:

 from multiprocessing.pool import ThreadPool
pool = ThreadPool(10)
inputs = [("NotebookA", "NotebookB") ]

run_in_parallel = lambda x: dbutils.notebook.run(x, 1800) 

from concurrent.futures import ThreadPoolExecutor, wait 
pool = ThreadPoolExecutor(3) 
results = [] 
with ThreadPoolExecutor(3) as pool:
  for x in inputs: 
    results.extend(pool.map(run_in_parallel, list(x)))
 

Ответ №1:

Также dbutils.notebook.run принимает 3-й аргумент, это карта параметров (подробнее см. Документацию). Итак, в вашем случае вам нужно будет изменить определение run_in_parallel на что-то вроде этого:

 run_in_parallel = lambda x: dbutils.notebook.run(x, 1800, args)
 

и остальная часть кода должна быть такой же.

Если вы захотите передавать разные аргументы в разные записные книжки, то вам нужно будет иметь список кортежей и передать этот список в a map , например:

 data = [('notebook 1', {'arg1':'abc'}), ('notebook2', {'arg1': 'def', 'arg2': 'jkl'})]
...
run_in_parallel = lambda x: dbutils.notebook.run(x[0], 1800, x[1]) 
with ThreadPoolExecutor(3) as pool:
  results.extend(pool.map(run_in_parallel, data))