我有一个使用RichCoFlatMapFunction
成员的自定义ValueState
。文档说
键/值接口的范围限定为当前输入元素的键
如果我像这样键入连接的流,该怎么办:
val connected = streamA
.connect(streamB)
.keyBy(a=>a.foo, b=>b.bar)
.flatMap(new MyRichCoFlatMapFunction)
那么语义是怎样的呢?它是否与第一个,第二个或两者的组合有关?
答案 0 :(得分:3)
keyBy
(a => a.foo
)的第一个参数定义了第一个流的关键字(streamA
)。第二个参数(b => b.bar
)是第二个流的关键字(streamB
)。两个参数都必须返回相同类型的键,即a.foo
和b.bar
的类型必须相同。
然后,connect运算符将所有来自streamA
和streamB
的记录以相同的密钥发送给同一运营商。有状态RichCoFlatMapFunction
将为当前元素的键设置ValueState
,即,如果为flatMap1(a: TypeA, out: Collector[TypeOut])
的值调用streamA
,则为该键设置状态a.foo
如果flatMap2(b: TypeB, out: Collector[TypeOut])
调用了来自streamB
的值,则会为密钥b.bar
设置状态。