Google Cloud Dataflow 使用外部源
Google Cloud Dataflow consume external source
所以我对 Dataflow 背后的概念有点疑问。特别是关于管道的结构方式。
我正在尝试使用一个外部 API,它提供一个索引 XML 文件,其中包含指向单独 XML 文件的链接。获得所有 XML 文件的内容后,我需要将它们拆分为单独的 PCollections,以便可以完成额外的 PTransform。
我很难理解第一个 xml 文件需要下载和阅读,然后才能下载和阅读产品 XML。正如文档所述,管道以 Source 开始并以 Sink 结束。
所以我的问题是:
- Dataflow 是完成此类任务的正确工具吗?
- 自定义源是要包含整个过程,还是应该在单独的 steps/pipelines 中完成?
- 是否可以在一个管道中处理这个并让另一个管道读取文件?
- 这个过程的高级概述是什么样的?
注意事项:我正在为此使用 Python SDK,但这可能并不真正相关,因为这更像是一个架构问题。
是的,这绝对可以做到。现在,一开始有点笨拙,但即将开展的名为 SplittableDoFn 的新基元的工作应该会使这种模式在未来变得更加容易。
- 首先使用 Create 创建一个包含单个元素的虚拟 PCollection。
- 使用 DoFn 处理 PCollection 下载文件、读出子文件并发出这些文件。
- [可选] 此时,您可能希望工作并行进行。为了让系统轻松并行化,您需要执行语义上不必要的 GroupByKey,然后执行 ParDo 以 'undo' 分组。这将这些文件名具体化到临时存储中,允许系统让不同的工作人员处理每个元素。
- 通过读取其内容处理每个子文件并将其发送到 PCollections 中。如果你希望不同的文件内容得到不同的处理,使用Partition将它们分类到不同的PCollections中。
- 做相关处理
所以我对 Dataflow 背后的概念有点疑问。特别是关于管道的结构方式。
我正在尝试使用一个外部 API,它提供一个索引 XML 文件,其中包含指向单独 XML 文件的链接。获得所有 XML 文件的内容后,我需要将它们拆分为单独的 PCollections,以便可以完成额外的 PTransform。
我很难理解第一个 xml 文件需要下载和阅读,然后才能下载和阅读产品 XML。正如文档所述,管道以 Source 开始并以 Sink 结束。
所以我的问题是:
- Dataflow 是完成此类任务的正确工具吗?
- 自定义源是要包含整个过程,还是应该在单独的 steps/pipelines 中完成?
- 是否可以在一个管道中处理这个并让另一个管道读取文件?
- 这个过程的高级概述是什么样的?
注意事项:我正在为此使用 Python SDK,但这可能并不真正相关,因为这更像是一个架构问题。
是的,这绝对可以做到。现在,一开始有点笨拙,但即将开展的名为 SplittableDoFn 的新基元的工作应该会使这种模式在未来变得更加容易。
- 首先使用 Create 创建一个包含单个元素的虚拟 PCollection。
- 使用 DoFn 处理 PCollection 下载文件、读出子文件并发出这些文件。
- [可选] 此时,您可能希望工作并行进行。为了让系统轻松并行化,您需要执行语义上不必要的 GroupByKey,然后执行 ParDo 以 'undo' 分组。这将这些文件名具体化到临时存储中,允许系统让不同的工作人员处理每个元素。
- 通过读取其内容处理每个子文件并将其发送到 PCollections 中。如果你希望不同的文件内容得到不同的处理,使用Partition将它们分类到不同的PCollections中。
- 做相关处理