Flink-CEP 中缺少 'Map' 的泛型类型参数



用于检测 Flink-CEP 中的模式的代码如下所示

// Generate temperature warnings for each matched warning pattern
DataStream<TemperatureEvent> warnings = tempPatternStream.select(
(Map<String, MonitoringEvent> pattern) -> {
TemperatureEvent first = (TemperatureEvent) pattern.get("first");

return new TemperatureEvent(first.getRackID(), first.getTemperature()) ;
}
);

如果在Mac中使用命令+ F9构建,则显示以下错误

Exception in thread "main" org.apache.flink.api.common.functions.InvalidTypesException: The generic type parameters of 'Map' are missing. 
It seems that your compiler has not stored them into the .class file. 
Currently, only the Eclipse JDT compiler preserves the type information necessary to use the lambdas feature type-safely. 
See the documentation for more information about how to compile jobs containing lambda expressions.
at org.apache.flink.api.java.typeutils.TypeExtractor.validateLambdaGenericParameter(TypeExtractor.java:1316)
at org.apache.flink.api.java.typeutils.TypeExtractor.validateLambdaGenericParameters(TypeExtractor.java:1302)
at org.apache.flink.api.java.typeutils.TypeExtractor.getUnaryOperatorReturnType(TypeExtractor.java:346)
at org.apache.flink.cep.PatternStream.select(PatternStream.java:64)
at org.stsffap.cep.monitoring.CEPMonitoring.main(CEPMonitoring.java:85

但是,构建 usignmvn clean install然后通过 Control + R 运行会显示输出,

  • 我想知道为什么这种情况一直发生?

  • 有什么办法可以做到这一点吗?

PS :但是我使用的是日食JDT插件,即使这样,它也会在日志中显示错误。聚甲醛的内容.XML是

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<compilerId>jdt</compilerId>
</configuration>
<dependencies>
<dependency>
<groupId>org.eclipse.tycho</groupId>
<artifactId>tycho-compiler-jdt</artifactId>
<version>0.21.0</version>
</dependency>
</dependencies>
</plugin>

欢迎提出建议。提前致谢

我知道Java 8 Lambdas非常方便。然而,它们几乎没有通过反射提供任何类型信息,这就是为什么 Flink 在生成底层序列化器时存在问题的原因。为了在 IDE 中运行 Flink 程序,我建议在涉及泛型类型时使用 Java 匿名类而不是 lambda。

首先,检查您的jdk版本,是否1.8?并升级tycho-compiler-jdt的版本以1.0.0您的SAN参考以下插件:

<plugin>
<!-- Use compiler plugin with tycho as the adapter to the JDT compiler. -->
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
<compilerId>jdt</compilerId>
</configuration>
<dependencies>
<!-- This dependency provides the implementation of compiler "jdt": -->
<dependency>
<groupId>org.eclipse.tycho</groupId>
<artifactId>tycho-compiler-jdt</artifactId>
<version>1.0.0</version>
</dependency>
</dependencies>
</plugin>

您可以参考来源 : https://ci.apache.org/projects/flink/flink-docs-release-1.4/dev/java8.html

在此之后,您必须做的是使用 Maven 在 CLI 上构建项目。通过 maven 构建程序后,您还可以从 IntelliJ 中运行它。

相关内容

  • 没有找到相关文章

最新更新