Создайте кортеж с необязательным полем (Flink Java) - PullRequest
0 голосов
/ 26 мая 2020

Я хочу сохранить необязательное значение, связанное с ключом Tuple2<String, String>.

Для этого я попытался создать class MyKey extends Tuple3<String, String, String> с третьим необязательным полем. Может иметь значение null и не используется при проверке равенства.

Затем я переопределил методы equals () и hashCode ():

class MyKey extends Tuple3<String, String, String> {
    @Override
    public boolean equals(Object o) {
        if (this == o) {
            return true;
        }
        if (!(o instanceof myKey)) {
            return false;
        }

        MyKey tuple = (MyKey) o;

        if (f0 != null ? !f0.equals(tuple.f0) : tuple.f0 != null) {
            return false;
        }
        if (f1 != null ? !f1.equals(tuple.f1) : tuple.f1 != null) {
            return false;
        }
        return true;

    }

    @Override
    public int hashCode() {
        int result = f0 != null ? f0.hashCode() : 0;
        result = 31 * result + (f1 != null ? f1.hashCode() : 0);
        return result;
    }
}
  • Есть ли какие-то подводные камни, о которых я должен знать при использовании этого метода?
  • Могу ли я рассмотреть какие-либо другие решения?

1 Ответ

1 голос
/ 26 мая 2020

Вы должны знать, что сериализатор кортежей, который Flink использует с серверной частью состояния RocksDB, не может сериализовать записи с пустыми полями. Я бы сказал, что это проблема.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...