Как условно запустить части вашего трубопровода Кедро?
У меня большой конвейер, на запуск которого уходит несколько часов. Небольшая его часть должна запускаться довольно часто, как мне запустить ее, не запуская весь конвейер?
2 ответа
Есть несколько способов указать, какие узлы или части вашего конвейера запускать.
Использовать
kedro run
такие параметры как--to-nodes
/--from-nodes
/--node
чтобы явно определить, что нужно запустить.В
kedro>=0.15.2
вы можете определить несколько конвейеров, а затем запустить только один из них сkedro run --pipeline <name>
. Если нет--pipeline
указан параметр, запускается конвейер по умолчанию. Конвейер по умолчанию может объединять несколько других конвейеров. Дополнительная информация об использовании модульных конвейеров: https://kedro.readthedocs.io/en/latest/04_user_guide/06_pipelines.htmlИспользуйте теги. Отметьте небольшую часть своего конвейера чем-то вроде "small", а затем выполните
kedro run --tag small
. Подробнее здесь: https://kedro.readthedocs.io/en/latest/04_user_guide/05_nodes.html
Я бы рекомендовал настроить правильную работу ваших тегов или конвейеров из cli, как предложил @idanov. В конечном итоге вам будет намного проще перейти на производство. Я бы также добавил, что вы можете немного обрезать конвейер и запускать его внутри Python, вот несколько примеров.
фильтровать по тегам
nodes = pipeline.only_nodes_with_tags('cars')
фильтр по узлу
nodes = pipeline.only_nodes('b_int_cars')
узлы фильтрации, такие как
query_string = 'cars'
nodes = [
node.name
for node in pipeline.nodes
if query_string in node.name
]
pipeline.only_nodes(*nodes)
только узлы с тегами или
nodes = pipeline.only_nodes_with_tags('cars', 'trains')
только узлы с тегами и
raw_nodes = pipeline.only_nodes_with_tags('raw')
car_nodes = pipeline.only_nodes_with_tags('cars')
raw_car_nodes = raw_nodes & car_nodes
raw_nodes = (
pipeline
.only_nodes_with_tags('raw')
.only_nodes_with_tags('cars')
)
добавить трубопроводы
car_nodes = pipeline.only_nodes_with_tags('cars')
train_nodes = pipeline.only_nodes_with_tags('trains')
transportation_nodes = car_nodes + train_nodes
Выше был отрывок из моих личных заметок кедро.