Я использую Kedro для запуска конвейеров для нескольких моделей, каждая из которых генерирует CSV-файл с одной и той же схемой. Однако мне нужно объединить каждый из сгенерированных файлов CSV в один и выполнить некоторую постобработку, которая и будет моим окончательным результатом.
Вот как выглядит мой каталог:
Код: Выделить всё
catalog.yml
model1.output:
type: pandas.CSVDataSet
filepath: ${data_path}/output/model1/output.csv
model2.output:
type: pandas.CSVDataSet
filepath: ${data_path}/output/model2/output.csv
model3.output:
type: pandas.CSVDataSet
filepath: ${data_path}/output/model3/output.csv
final_output:
type: pandas.CSVDataSet
filepath: ${data_path}/output/final_output.csv
layer: output
Я могу определить свой узел так, чтобы каждый выход вызывался индивидуально и комбинированно, как показано ниже:
Код: Выделить всё
node.py
def combine(model_1_output, model_2_output, model_3_output):
...
Однако я хотел бы сделать это динамически, когда я определяю в своих параметрах список допустимых моделей, и загружаются только наборы данных этих выходных данных модели. Это будет полезно в случае добавления будущих моделей или в случае необходимости выборочного запуска подмножества всех моих моделей.
Код: Выделить всё
parameters.yml
valid_models:
- model1
- model2
Есть ли способ это сделать? Я пробовал использовать как конвейерные, так и узловые перехватчики, однако мне не удалось использовать ни один из них для решения этой конкретной проблемы. Также кажется, что я не могу получить доступ к global_parameters, где мой ${data_path} определен непосредственно в узле, чтобы таким образом я мог читать необходимые наборы данных.
Изменить:
Оказывается, я могу получить доступ к глобальному параметру ${data_path}, определив его в base/parameters.yml и указав свой путь в виде строки:
Код: Выделить всё
node.py
def combine(params):
base_path = params[data_path]
for model in valid_models:
data = pd.read_csv(f"base_path/output/{model}/output.csv")
Однако я до сих пор не уверен, что это лучший подход, и можно ли использовать функции kedro для реализации такого поведения
Подробнее здесь:
https://stackoverflow.com/questions/764 ... ynamically