Задача: Я должен выполнить задание ETL, которое будет извлекать изображения TIFF из GCS, преобразовывать эти изображения в текст с помощью комбинации инструментов с открытым исходным кодом для компьютерного зрения, таких как OpenCV + Tesseract, и в конечном итоге загружать данныев BigQuery
Проблема: Я пытаюсь использовать Dataflow для выполнения задания ETL, потому что у меня есть миллионы изображений (каждое изображение - отдельный файл / большой двоичный объект), и я хочу масштабировать до сотенмашин.Однако я сталкиваюсь с некоторыми проблемами с потоком данных (которые будут описаны более подробно ниже) в отношении наилучших способов загрузки изображений.
Вопросы: В конечном итоге я пытаюсь определить:
1) Является ли поток данных лучшим решением для этого?Альтернативы, которые я рассмотрел, - это выполнение многопоточной работы на большой машине.Есть ли другие альтернативы, которые я должен рассмотреть?
2) Если поток данных - лучшее решение, то как мне конкретно обрабатывать загрузку миллионов изображений (чтобы я мог выполнить их через преобразование)?
Технические проблемы:
Следующий пост Рекомендуемое решение рекомендует использовать beam.io.gcp.gcsio.GcsIO().open(filepath, 'r')
в DoFn для загрузки изображений из GCS.
I 'Я пытался пойти по этому пути, используя beam.io.gcp.gcsio.GcsIO().open(filepath, 'r')
, но у меня проблемы с открытием изображений.Эта проблема описана здесь: IO.BufferReader проблема .
При использовании DirectRunner
я могу загружать файлы изображений с помощью этого клиента api from google.cloud import storage
, и я могу открывать и предварительно обрабатывать изображения без проблем.Однако при использовании обработчика потока данных у меня возникают проблемы с зависимостями AttributeError: 'module' object has no attribute 'storage'
.
При этом Если Dataflow - лучшее решение, то какой метод загрузки и обработки миллионов изображений лучший?