我有2个数据流(例如)
ts | device | custId | temp
1 | 'device1'| 1 | 10
1 | 'device2'| 4 | 7
2 | 'device1'| 1 | 10
3 | 'device1'| 1 | 10
4 | 'device1'| 1 | 10
5 | 'device2'| 4 | 10
我创建了一个CEP模式,我想在4秒内检查温度是否高于30。
val pattern = Pattern.begin[Device]("start")
.where(_.sumtemp >= 30)
.within(Time.seconds(4))
是否有一种方法可以将此模式流的输出连接到另一个进入的数据流以达到以下要求?
ts | custId | morethanthiry
1 | 1 | yes
2 | 4 | no
如果能分享一个例子来做到这一点,我将非常感激。
答案 0 :(得分:0)
有多种选择。您可以使用coGroup
示例:
set1.coGroup(set2).where(<key-definition>).equalTo(<key-definition>).with(new MyCoGroupFunction());
您可以将其视为SQL中的联接。
一个实现的小例子:
class MyCoGroupFunction extends RichCoGroupFunction[DataTypeOfStream1, DataTypeOfStream2, DataTypeOfOutput] {
override def coGroup(first: DataTypeOfStream1,
second: DataTypeOfStream2],
out: DataTypeOfOutput): Unit = {
out.collect(...)
//your output
}
}
如果需要,您还可以使用状态。
还有其他选项可以加入两个流,例如
请参见https://ci.apache.org/projects/flink/flink-docs-stable/dev/stream/operators/ 有关更多信息。