#python #kedro
#питон #кедро #python #kedro
Вопрос:
Я пытаюсь добавить атрибуты слоя в свой каталог. Один из распространенных шаблонов, который у меня есть, — это получить некоторые данные ( raw
), очистить их, а затем вывести список частей ( pri
). Затем мне нужны метаданные для тех частей, из которых я беру список частей pri
и передаю в функцию, которая получает данные ( raw
). Сам конвейер не является круговым, но kedro, похоже, не нравится, когда я создаю круговые слои.
Есть ли общий шаблон, которого мне не хватает для этого варианта использования?
Можно ли разрешить слоям быть круглыми?
Пример
Я попытался собрать общий пример ниже.
raw_truck_sales:
type: pandas.ParquetDataSet
filepath: <filepath>
layer: raw
int_truck_sales:
type: pandas.ParquetDataSet
filepath: <filepath>
layer: int
pri_truck_sales:
type: pandas.ParquetDataSet
filepath: <filepath>
layer: pri
pri_truck_sold_models:
type: pandas.ParquetDataSet
filepath: <filepath>
layer: pri
raw_truck_metadata:
type: pandas.ParquetDataSet
filepath: <filepath>
layer: raw
int_truck_metadata:
type: pandas.ParquetDataSet
filepath: <filepath>
layer: int
pri_truck_metadata:
type: pandas.ParquetDataSet
filepath: <filepath>
layer: pri
nodes = [
node(
get_truck_sales,
inputs=None,
outputs='raw_truck_sales',
),
node(
create_int_truck_sales,
inputs='raw_truck_sales',
outputs='int_truck_sales',
),
node(
create_pri_truck_sales,
inputs='int_truck_sales',
outputs='pri_truck_sales',
),
node(
lambda truck_sales: truck_sales[['model']],
inputs='pri_truck_sales',
outputs='pri_truck_models_sold',
),
# This node takes the list of trucks sold and gets metadata for them
# It seems to break kedros layers model by creating a circular reference
node(
get_truck_metadata,
inputs='pri_truck_models_sold',
outputs='raw_truck_metadata',
),
node(
create_int_truck_metadata,
inputs='raw_truck_metadata',
outputs='int_truck_metadata',
),
node(
create_pri_truck_metadata,
inputs='int_truck_metadata',
outputs='pri_truck_metadata',
),
]
Комментарии:
1. Я думаю, что лучшее, что можно сделать в этом случае, это просто полностью удалить информацию о слое из этого проблемного набора данных (
pri_truck_sold_models
). Viz достаточно умен, чтобы визуализировать его в логическом месте на основе топологического порядка узла. Мы выводим круговые слои с ошибкой в viz, потому что слои линейны по определению, по крайней мере визуально.2. Спасибо за отзыв @LimH! Это имеет смысл. Я думаю, что для нас слои не будут работать очень хорошо. Часто мы работаем с набором данных, который содержит подмножество продуктов (
trucks
) в примере выше. и нам нужно получить очень небольшое подмножество данных из гораздо большего набора данных, который может содержать больше, чем просто подмножество. —- Используя приведенный выше пример. В некоторых крайних случаях получение всех метаданных буквально занимает дни, в то время какtrucks
подмножество занимает секунды. Итак, нам нужна некоторая округлость.
Ответ №1:
О, привет, Вэйлон! Ха-ха.
Не могли бы вы опубликовать всю трассировку стека, которая показывает ошибку?
Я скопировал ваш конвейер, и для меня он отлично визуализируется, что означает отсутствие циклических зависимостей. Возможно, есть другие узлы, которые вы здесь не указали, которые влияют на ваш вывод?
РЕДАКТИРОВАТЬ: Лим Хоанг только что указал, что в вашем примере есть c_pro_truck_models_sold
, и если бы это было pro_truck_models_sold
, то это было бы циклическим.
Лим и я согласны с тем, что удаление слоев было бы вашим лучшим выбором. В любом случае, визуализация kedro на самом деле не страдает от потери, пока окружающие узлы сохраняют свои слои неповрежденными.
Смотрите следующее изображение для доказательства.
Комментарии:
1. Исправлена опечатка, спасибо Там. Теперь это имеет смысл благодаря вам и @LimH. Я надеялся улучшить выравнивание между слоями, но я в порядке, не используя слои.
Ответ №2:
Описанная вами взаимосвязь между циклическими слоями не соответствует тому, как изначально были спроектированы слои данных, с ограничениями на то, какие слои передаются другим слоям:
| Layer | Input Layer | Output Layer |
|--------------|---------------------------------------------|--------------------------------------------------------|
| Reference | | Primary, Feature, Model Input, Model Output, Reporting |
| Raw | | Intermediate, Primary |
| Intermediate | Raw | Primary |
| Primary | Raw, Intermediate, Reference | Feature, Reporting |
| Feature | Primary, Reference | Model Input, Reporting |
| Model Input | Feature, Reference | Reporting |
| Model Output | Model Input | Reporting |
| Reporting | Primary, Feature, Model Input, Model Output | |
Kedro не применяет эту структуру (или какой-либо конкретный набор слоев), но помогает ее поддерживать. Поэтому, с точки зрения наилучших практик, следует избегать циклических зависимостей между слоями данных.