解决 Flink 中 'InvalidTypesException: The types of the interface org.apache.flink.util.OutputTag could not be inferred' 错误
解决 Flink 中 'org.apache.flink.api.common.functions.InvalidTypesException: The types of the interface org.apache.flink.util.OutputTag could not be inferred' 错误
在使用 Apache Flink 时,你可能会遇到 'org.apache.flink.api.common.functions.InvalidTypesException: The types of the interface org.apache.flink.util.OutputTag could not be inferred' 的错误。这个错误信息表明 Flink 无法推断出 org.apache.flink.util.OutputTag 接口的具体类型。
错误原因:
这个错误通常是由于 Flink 对以下几种类型的支持有限造成的:
- 合成接口: 由编译器生成的接口,例如在使用 lambda 表达式时。* Lambda 表达式: Java 8 中引入的匿名函数。* 泛型或原始类型: 未指定具体类型的类型参数。
解决方法:
为了解决这个问题,你可以尝试以下几种方法:
-
明确指定 OutputTag 的类型:
java OutputTag<String> myOutputTag = new OutputTag<String>('my-output-tag');在创建
OutputTag实例时,明确地指定其类型参数,例如<String>。 -
使用具体类代替接口:
如果可能,尽量使用具体的类来代替接口,避免使用
OutputTag。 -
避免使用 Lambda 表达式:
尝试使用匿名内部类来代替 lambda 表达式。
-
检查 Flink 版本:
较新版本的 Flink 可能对这些类型的支持更完善,尝试升级到最新版本。
示例:
假设你正在使用 ProcessFunction 并遇到了这个错误,可以尝试以下修改:java// 错误示范DataStream
SingleOutputStreamOperator
// 正确示范DataStream
SingleOutputStreamOperator
通过明确指定 OutputTag 的类型参数,可以帮助 Flink 正确推断类型,避免该错误的发生。
原文地址: https://www.cveoy.top/t/topic/fWOD 著作权归作者所有。请勿转载和采集!