#apache-flink
Вопрос:
Там написано:
Регистрация подтипов: Если сигнатуры функций описывают только супертипы, но на самом деле они используют их подтипы во время выполнения, это может значительно повысить производительность, чтобы Флинк знал об этих подтипах. Для этого вызовите .RegisterType(clazz) в среде StreamExecutionEnvironment или ExecutionEnvironment для каждого подтипа.
Есть ли тестовый случай или пример кода, демонстрирующий использование этого сценария?
Спасибо.
Ответ №1:
DataStream<Msg> test = stream.map(x -> (x < 10) ? new Msg1() : new Msg2());
Вы должны зарегистрировать эти подтипы:
env.registerType(Msg1.class);
env.registerType(Msg2.class);
PojoSerializer
Теги каждого экземпляра либо с полным именем подкласса
, тегом подкласса при регистрации (как указано выше), либо сериализуют целевой тип напрямую (без тега).
Таким образом, регистрация типа не требуется, если вы всегда используете
данный тип напрямую и никогда не сериализуете экземпляры подклассов. Но когда они будут сериализованы, регистрация подклассов создаст теги, которые будут более компактными (и более эффективными), чем полные имена подклассов.