【发布时间】:2018-11-20 15:12:00
【问题描述】:
任务:我将运行一个 ETL 作业,该作业将从 GCS 中提取 TIFF 图像,使用 OpenCV + Tesseract 等开源计算机视觉工具的组合将这些图像转换为文本,并最终加载数据导入 BigQuery
问题:我正在尝试使用 Dataflow 来执行 ETL 作业,因为我有数百万张图像(每个图像都是一个单独的文件/blob)并且我想扩展到数百台机器。但是,关于下载图像的最佳方式,我遇到了一些关于 Dataflow 的问题(将在下面更详细地描述)。
问题:最终我想确定:
1) 数据流是做到这一点的最佳解决方案吗?我考虑过的替代方案是在大型机器上运行多线程作业。还有其他我应该考虑的替代方案吗?
2)如果数据流是最好的解决方案,那么我应该如何专门处理下载数百万张图片(以便我可以通过转换运行它们)?
技术挑战:
以下帖子 Recommended solution 建议在 DoFn 中使用 beam.io.gcp.gcsio.GcsIO().open(filepath, 'r') 从 GCS 下载图像。
我尝试使用beam.io.gcp.gcsio.GcsIO().open(filepath, 'r') 沿着这条路走下去,但是,我无法打开图像。此处描述了该问题:IO.BufferReader issue。
使用DirectRunner 时,我可以使用此客户端api from google.cloud import storage 下载图像文件,我可以打开并预处理图像没有问题。但是,在使用数据流运行器时,我遇到了依赖问题,AttributeError: 'module' object has no attribute 'storage'。
话虽如此,如果 Dataflow 是最佳解决方案,那么下载和处理数百万张图像的最佳方法是什么?
【问题讨论】:
标签: python image-processing google-cloud-dataflow apache-beam