如何使用Apache Beam模型导航树

时间:2017-07-17 22:34:53

标签: google-cloud-dataflow apache-beam

我有一个管道,开始接收类别ID列表。

ParDo我执行DoFn,使用这些ID作为参数调用REST API,并返回PCollectionCategory对象。

.apply("Read Category", ParDo.of(new DoFn<String, Category>(){});

在第二个ParDo中,我会保留这些Category个对象,阅读他的子属性并返回他的子ID。

.apply("Persist Category", ParDo.of(new DoFn<Category, String>(){});

我想在第二个ParDo返回的ID列表上再次重复第一个ParDo,直到没有子类别为止。

如何使用受益于并行处理的Apache Beam模型来执行此操作?

1 个答案:

答案 0 :(得分:1)

Apache Beam目前没有为迭代并行处理提供任何基元。您可以使用一些解决方法,例如其中一些列在this answer

另一种方法是编写一个简单的Java函数,它将遍历树以获取特定的顶级ID(从给定ID开始递归获取类别和子元素),并使用ParDo并行应用该函数 - 但是,显然,在该函数中将没有分布式并行性。

您也可以部分&#34;展开&#34;首先在管道中进行迭代,以在树的前几个级别获得一堆分布式并行性 - 例如构建一个包含第一个和第二个ParDo的序列的管道,然后应用第三个ParDo,它应用迭代Java函数来遍历剩余的级别。

请注意,如果您在Dataflow或任何其他支持融合优化的运行器上执行,很可能您需要使用preventing fusion的其中一个技巧。