我也有同样的问题,我刚刚“解决”了它,但答案没有多大意义(至少对我来说),你会看到的。
说明:
在我最初的代码中,我有这样的代码:
var env = StreamExecutionEnvironment.getExecutionEnvironment
env.setStreamTimeCharacteristic(TimeCharacteristic.EventTime)
env.setParallelism(1)
env.getConfig.setAutoWatermarkInterval(1)
...
var stream : DataStream[String] = env.readTextFile("/home/luca/Desktop/input")
var tupleStream = stream.map(new S2TMapFunction())
tupleStream.assignTimestampsAndWatermarks(new PlacasPunctualTimestampAssigner())
val pattern = Pattern.begin(String,Double,Double,String,Int,Int).where(new SameRegionFunction())
val patternStream = CEP.pattern(newTupleStream,pattern)
val result = patternStream.process(new MyPatternProcessFunction())
root据我的日志记录,我看到SameRegionFunction和MyPatternProcessFunction都没有被执行,至少可以说,这是非常意外的。
回答:
因为我很笨,所以我决定 test让流通过另外一个 transformation函数,只是为了检查我的事件是否真的被插入到流中。因此,我将tupleStream提交给map操作,生成newUppleStream,如下所示:
var env = StreamExecutionEnvironment.getExecutionEnvironment
env.setStreamTimeCharacteristic(TimeCharacteristic.EventTime)
env.setParallelism(1)
env.getConfig.setAutoWatermarkInterval(1)
...
var stream : DataStream[String] = env.readTextFile("/home/luca/Desktop/input")
/* I created 'DoNothingMapFunction', where the output event = input event*/
var tupleStream = stream.map(new S2TMapFunction())
var newTupleStream = tupleStream.assignTimestampsAndWatermarks(new PlacasPunctualTimestampAssigner()).map(new DoNothingMapFunction())
val pattern = Pattern.begin(String,Double,Double,String,Int,Int).where(new SameRegionFunction())
val patternStream = CEP.pattern(newTupleStream,pattern)
val result = patternStream.process(new MyPatternProcessFunction())
然后SameRegionFunction和MyPatternProcessFunction决定运行。
组织分解结构:
我改了线:
var newTupleStream = tupleStream.assignTimestampsAndWatermarks(new PlacasPunctualTimestampAssigner()).map(new DoNothingMapFunction())
为此:
var newTupleStream = tupleStream.assignTimestampsAndWatermarks(new PlacasPunctualTimestampAssigner())
它也起作用了。显然,仅仅是另一个层次的间接寻址就足以使其 job ,尽管我不清楚为什么会发生这种情况。