在另一个Transform中重新使用PCollection的输出,该另一个Transform是管道的后期阶段

时间:2019-08-09 19:53:34

标签: apache-beam apache-beam-io

在Java或任何其他程序中,我们可以保存变量的状态并在以后根据需要引用变量值。 Apache Beam似乎无法做到这一点,有人可以确认吗?如果可以的话,请给我指出一些示例或文档。

我正在尝试解决以下需要使用我以前的转换输出的上下文的情况。

我是Apache Beam的新手,所以很难理解如何解决上述问题。

方法1:

PCollection config = p.apply(ReadDBConfigFn(options.getPath()));
PCollection<Record> records = config.apply(FetchRecordsFn());
PCollection<Users> users = config.apply(FetchUsersFn());

//现在使用“记录”和“用户”进行处理,如何使用Beam完成?

方法2:

PCollection config = p.apply(ReadDBConfigFn(options.getPath()));
PCollection<Record> records = config.apply(FetchRecordsFn()).apply(FetchUsersAndProcessRecordsFn());

//在'FetchUsersAndProcessRecordsFn'行上方需要'config',以便可以获取用户,但似乎没有办法?

1 个答案:

答案 0 :(得分:0)

如果我理解正确,您是否想在处理步骤中使用两个集合recordsusers中的元素? Beam中有两种常用的模式可以完成此任务:

如果您希望加入这两个集合,则可能希望使用CoGroupByKey将相关记录和用户分组在一起进行处理。

如果其中一个集合(记录或用户)很小,并且在处理过程中整个集合都需要可用,则您可能希望将其作为side input的形式发送到处理步骤。

您的示例中的PCollection config可能不清楚,因此我可能会误解了...这符合您的用例吗?