обновление данных в реестре dvc из других проектов

У меня есть несколько проектов, которые используют и обновляют одни и те же источники данных. Недавно я узнал об реестрах данных dvc, которые кажутся отличным способом управления версиями. данные по этим различным проектам (например, парсеры, вычислительные конвейеры).

Я поместил все соответствующие данные в data-registry, а затем импортировал соответствующие файлы в проект парсинга с помощью:

$ poetry run dvc import https://github.com/username/data-registry raw

где raw — это каталог, в котором хранятся очищенные данные. Кажется, это сработало правильно, но затем, когда я начал строить конвейер dvc, вывел данные в файл, который уже отслеживался dvc, я получил ошибку:

$ dvc run -n menu_items -d src/ -o raw/menu_items/restaurant.jsonl scrapy crawl restaurant
ERROR: Paths for outs:                                                
'raw'('raw.dvc')
'raw/menu_items/restaurant.jsonl'('menu_items')
overlap. To avoid unpredictable behaviour, rerun command with non overlapping outs paths.

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

В идеале я хотел бы обновить реестр данных новыми данными из проекта скребка, а затем разрешить другим зависимым проектам обновлять свои данные, когда они будут готовы это сделать.


person dino    schedule 28.02.2021    source источник
comment
Я получаю похожее, но другое сообщение об ошибке, когда я dvc import файл restaurant.jsonl вместо всего каталога raw: ОШИБКА: вывод 'restaurant.jsonl' уже указан на этапе: 'restaurant.jsonl.dvc'.   -  person dino    schedule 28.02.2021


Ответы (1)


Когда вы import (или add) что-то добавляете в свой проект, создается файл .dvc, в котором это что-то перечисляется (в данном случае raw/ каталог) в качестве вывода.

DVC не допускает перекрытия выходных данных между файлами .dvc или этапами dvc.yaml, а это означает, что этап menu_items не должен записывать в raw/, поскольку он уже находится под контролем raw.dvc.

Можете ли вы сделать отдельный каталог для выходных данных конвейера? Например. использовать processed/menu_items/restaurant.jsonl

person Jorge Orpinel Pérez    schedule 28.02.2021
comment
Понятно. Таким образом, реестр данных от DVC не обязательно является централизованным хранилищем данных, как я читаю документы. Похоже, что наилучшей практикой является то, что каждый подпроект может сделать свои выходные данные доступными для других проектов, которые затем могут импортировать их в эти проекты. Спасибо! - person dino; 01.03.2021
comment
Они намерены помочь централизовать данные, но проекты, которые потребляют их, не могут вносить изменения обратно, потому что они являются отдельными проектами DVC. Вместо этого вы можете использовать общий удаленный DVC или даже кэш DVC. Например. dvc.org/doc/use-cases/shared-development-server - person Jorge Orpinel Pérez; 02.03.2021