#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))