3

在 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 中使用 command + 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:但是我正在使用 eclipse JDT 插件,即使那样它在日志中也显示错误。POM.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>

非常欢迎提出建议。在此先感谢

4

2 回答 2

3

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

于 2017-08-15T14:48:02.540 回答
0

首先,检查你的jdk版本,是1.8吗?并将版本升级tycho-compiler-jdt1.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 中运行它。

于 2017-08-14T05:31:51.890 回答