0

我的疑问是 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 自己管理这些方法对性能更好?

亲切的问候!

4

3 回答 3

2

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

于 2020-09-01T13:53:08.413 回答
0

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

DataStream<EventCounter> stream = env.addSource(...);
KeyedStream<EventCounter, String> keyed = stream.keyby(k->k); /*Where k is the class object type!*/
于 2020-09-01T17:11:22.737 回答
0

在写这两个方法之前,想想你的类需要是,symmetric还是transitiveconsistent

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

于 2020-09-01T06:53:34.570 回答