比方说,我想在所有任务之间共享某种二进制文件(例如,包含训练有素的ML模型)。如何使用DataStream
API?
虽然我了解DataSet
API中有broadcast variables的概念,但似乎没有等效的流媒体内容。
我想也许我可以有一个自定义数据源,该数据源发出一个值(我要共享的Serializable
,该值由闭包内部的Flink捕获),并使用{{1 }}。这是一个可行的选择吗?
我正在寻找类似于Spark's shared variables的东西,以便允许我正在构建的东西的“客户端”在将其传递给“我的”运算符的lambda中使用给定的共享变量(实质上是是Flink和其他引擎之上的抽象)。
编辑:鉴于必须将其设为键,因此无法选择可查询状态。
答案 0 :(得分:1)
有两种方法可以使用Flink的DataStream API来解决此问题。一种是使用rich functions,然后以open()
方法加载/初始化共享数据。如果该值不变,则应该可以正常工作。另一种方法是使用broadcast state在需要的地方分发共享数据。
需要应用训练有素的ML模型的典型流应用程序将使用一些有状态的运算符来计算特征,然后将组合的特征向量馈入已加载模型的RichFlatMap
中。