有没有一种方法可以在apachebeam中编写一个在不同的runner中运行不同的运算符



例如,假设我想通过连接一个键,用查找表中的更多值来丰富集合。在spark runner中,我更愿意为这个操作符进行广播连接,就像在flink runner中一样,我希望进行rpc调用(比如对redis(来加载基于键的值。

那么,有办法实现这一点吗?相同的逻辑语义,但基于runner的执行不同。

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

DoFn中,您可以运行任意代码,因此与您选择的存储系统集成非常容易。但是,当你这样做的时候要小心,因为只有一次行为才是正确的,需要考虑并行性、重试、检查点等的设计。

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

最新更新