用于flink中自定义类的hashCode()和equals()方法



我怀疑Flink with Java中的自定义类是否需要重写hashCode()equals()方法,因为我在本页中读到hashCode()决不能在分布式系统中实现,Apache Flink就是其中之一。

示例:我有这个类:

public class EventCounter {
public String Id;
public long count;
public Timestamp firstEvent;
public Timestamp lastEvent;
public Date date;
public EventCounter() {
}
}

我需要在Flink中为这类类类实现hashCode()equals()吗?还是让Flink自己管理这些方法对性能更好?

谨致问候!

要在Flink中用作键的类型(即从KeySelector返回的值(必须具有有效的hashCode和equals实现。特别是,hashCode在JVM之间必须是确定性的(这就是为什么数组和枚举不能在Flink中用作键的原因(。

在编写这两个方法之前,只需考虑一下您的类需要是symmetrictransitive还是consistent

它是专门为基于哈希的算法设计的。因此,您需要确保它们以正确的方式进行,并且附带说明创建哈希代码是一项CPU密集型任务。

hasCode()equals()方法仅在对象/类将用作Flink的密钥的情况下才需要实现,例如:

DataStream<EventCounter> stream = env.addSource(...);
KeyedStream<EventCounter, String> keyed = stream.keyby(k->k); /*Where k is the class object type!*/

相关内容

  • 没有找到相关文章

最新更新