Flink自定义Window----自定义Evictor(驱逐者)

本文介绍了如何使用Flink自定义Evictor实现一个特殊的TimeWindow,以满足将当前数据与21天前数据进行比较的需求。通过创建GantryTimeEvictor类,保留每个窗口的第一天和最后一天的数据,从而实现特定形状的窗口。
摘要由CSDN通过智能技术生成

在看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,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值