有没有办法在 apache beam 中编写一个在不同的跑步者中运行不同的操作员?

Is there a way to write an operator in apache beam which runs differently in different runner?

例如,假设我想通过加入一个键来使用查找 table 中的更多值来丰富集合。 在 spark runner 中,我更愿意为此运算符执行广播连接,而在 flink runner 中,我想进行 rpc 调用(比如对 redis)以根据键加载值。

那么有没有什么办法可以实现呢?相同的逻辑语义但基于运行器的不同执行。

在任何情况下,不同转换的内部 Beam 实现取决于运行器,但如果您需要它用于您自己的转换,则可以使用 PipelineOptions 来获取运行器名称并决定采用哪个代码路径。

这不是 Beam 的一部分。 Beam 的目的是提供一个可移植的编程模型,因此产生不可移植的转换违背了项目的目标。

您可以在 DoFn 中 运行 任意代码,因此很容易与您选择的存储系统集成。但是在执行此操作时要小心,因为一旦行为正确就需要考虑并行性、重试、检查点等的设计