在看flink Window 机制的相关博客时,看到有个同学的需求很有趣,
"如何让一个DataStream中的某个字段与21天前的该字段做比较?"
该同学给定了一个大小21天,每一天滑动一次的window
解决方案:
在其TimeWindow上进行修改,挖空中间不需要的20天,整出来一个门字形的TimeWindow,
这样只剩下第一天和最后一天的两个门脚数据,以进行后续的操作,如比较
具体实现依靠自定义Evictor实现,
这样只需要应用该GantryTimeEvictor 即可
keyedStream
.window(SlidingEventTimeWindows.of(Time.days(21), Time.days(
.evictor(GantryTimeEvictor.of(Time.days(1)));
代码如下:
package com.run;
import org.apache.flink.api.common.time.Time;
import org.apache.flink.streaming.api.windowing.evictors.Evictor;
import org.apache.flink.streaming.api.windowing.windows.TimeWindow;
import org.apache.flink.streaming.runtime.operators.windowing.TimestampedValue;
import java.util.Iterator;
/**
* @Author MrBlack
* @Date 2019/12/17 017 下午 6:43
**/
public class GantryTimeEvictor implements Evictor<Object,

本文介绍了如何使用Flink自定义Evictor实现一个特殊的TimeWindow,以满足将当前数据与21天前数据进行比较的需求。通过创建GantryTimeEvictor类,保留每个窗口的第一天和最后一天的数据,从而实现特定形状的窗口。
最低0.47元/天 解锁文章
599

被折叠的 条评论
为什么被折叠?



