0

如果我们有一个看起来像这样的流

Person {
     …
     OrganizationID
}

我们想加入另一个流

Organization {
     ID
     …
}

像这样创建复合记录:

Person {
     …
     Organization {
           ID
           …
     }
}

在Apache Beam 编程模型中这样做最惯用和最有效的方法是什么?

注意:已经看到side inputs 被推荐作为类似问题的解决方案,但它在这里不适用,因为我们所追求的效果是每次更改其中一个Person Organization应该产生一个新的增强Person记录。

4

1 回答 1

1

编辑:

答案是,由于 Apache Beam 实施中缺少撤回,Apache Beam 不支持您的示例。

==================================================== =

原答案:

您可能需要检查 Apache Beam 中的加入库 [1]。

加入 Beam 模型需要对流的窗口策略进行额外思考。听起来你的流不需要窗口,所以说你的流都在全局窗口中。但是,如果您在两个流上设置全局窗口,使用默认触发器并像 Beam 的 Join 库一样执行 Join,由于 watermark 永远不会通过无限窗口,您的 Join 不会发出任何结果。但是,如果您设置重复的数据驱动触发器(一旦看到足够多的元素就触发),但是由于缺少对 Beam 中撤回的支持,尚不清楚如何为 Join 优化预发射结果。

[1] https://github.com/apache/beam/blob/master/sdks/java/extensions/join-library/src/main/java/org/apache/beam/sdk/extensions/joinlibrary/Join.java #L49

于 2019-01-25T21:59:44.033 回答