Apache Beam on Dataflow - 加载外部文件

Posted

技术标签:

【中文标题】Apache Beam on Dataflow - 加载外部文件【英文标题】:Apache Beam on Dataflow - Load external file 【发布时间】:2021-06-29 12:17:38 【问题描述】:

我正在使用我创建的模板在 Dataflow 上运行 Apache Beam ETL 作业。我想添加一个额外的步骤,将处理后的数据上传到 BigQuery 并在需要时创建表,因此我需要声明表架构。

架构实际上非常大,因此最好的选择是将其写入 .json 文件并通过简单的方式导入:

with open('filename.json', 'r') as f:
    schema = json.load(f)

但是,如何在我的模板上声明这个外部文件,以便当作业部署并在工作人员上运行时,他们可以找到该文件?我可以在我的setup.py 上设置任何类似的选项,以便文件与模板一起保存吗?

我想到的其他选择是:

    将文件保存到 GCS 存储桶并使用云存储客户端读取它并将其作为辅助输入传递给我的函数 在我的管道文件上手动写入架构,即使它变脏了

最好的方法是什么?

【问题讨论】:

【参考方案1】:

对于大文件,我会将其存储在 GCS 存储桶中(备选方案 1)。如果这不适用,您可以创建 a flex template for your pipeline 并将架构添加到容器中。

【讨论】:

以上是关于Apache Beam on Dataflow - 加载外部文件的主要内容,如果未能解决你的问题,请参考以下文章

GCP Dataflow + Apache Beam - 缓存问题

Dataflow 大型侧输入中的 Apache Beam

无法在 DataFlow Apache Beam 中创建通用日期转换类

Dataflow/Apache Beam 在啥阶段确认发布/订阅消息?

Dataflow 中的自定义 Apache Beam Python 版本

使用 Apache Beam 的 Dataflow 批量加载的性能问题