用于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还是transitiveconsistent

它专门为基于哈希的算法而设计。因此,您需要确保以正确的方式进行操作,并且创建哈希码的旁注是一项占用大量CPU的任务。

,

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

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...