如何解决用于flink中的自定义类的hashCode和equals方法
我的疑问是,在Flink with Java中的自定义类是否需要覆盖hashCode()
和equals()
方法,因为我在this page中读到,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中用作键的原因)。
,
在编写这两种方法之前,仅考虑一下您的类是symmetric
还是transitive
或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!*/
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。