Flink Keyby(Java-bean)类型

最近在改业务代码,以前都图省事了全部用tuple,
代码经常出现DataStream,Integer>>,发现后期
很难维护,时间久了,也不一目了解每个string代表什么意思。
全部改为Java POJO方式。

例如下面代码

 DataStream> itemWindowStream = itemClickedStream.map(new ItemIdClickMapFunction()).keyBy(0).window(SlidingProcessingTimeWindows.of(Time.minutes(60 * 2), Time.seconds(30))).sum(1);

map(new ItemIdClickMapFunction()) 返回是 DataStream> 流,我想按keyBy(ItemIdWithAction)去分组,但发生报错。

查下下KeyBy的api
Flink Keyby(Java-bean)类型_第1张图片
如果POJO作为key,必须重写ItemIdWithAction的hash

import lombok.Data;
import java.util.Objects;

@Data
public class ItemIdWithAction{

    private String itemId;

    private String action;

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        ItemIdWithAction that = (ItemIdWithAction) o;
        return Objects.equals(itemId, that.itemId) &&
                Objects.equals(action, that.action);
    }

    @Override
    public int hashCode() {
        StringBuilder sb = new StringBuilder();
        sb.append(itemId);
        sb.append(action);
        char[] charArr = sb.toString().toCharArray();
        int hash = 0;
        for(char c : charArr) {
            hash = hash * 131 + c;
        }
        return hash;
    }
}

你可能感兴趣的:(Flink)