自定义泛型类的flink类型提取问题

42fyovps  于 2021-06-25  发布在  Flink
关注(0)|答案(1)|浏览(418)

(Flink1.3)
我在类型提取方面有问题:

The return type of function '...' could not be determined 
automatically, due to type erasure. You can give type information hints 
by using the returns(...) method on the result of the transformation 
call, or by letting your function implement the 'ResultTypeQueryable' 
interface.

使用时 DataStream<MyGenericClass<T>> 哪里:

public class MyGenericClass<T> extends Tuple2<String, T> {
    ...
}

我怎样才能解决这个问题没有 .returns(..) 解决方案?
你能给我一个如何实现类型信息工厂的例子吗 ResultTypeQueryable 为了 MyGenericClass ?
先谢谢你

zwghvu4y

zwghvu4y1#

免责声明:我的回答基于您使用java8 lambda表达式的假设
我不太确定,但根据flink文档,这是一个问题,因为“像openjdk和oraclejdk的javac这样的编译器会丢弃所有与lambda表达式相关的通用参数。这意味着诸如tuple2或collector之类声明为lambda函数输入或输出参数的类型将被删减到已编译的.class文件中的tuple2或collector,这对于flink编译器来说信息太少。”
根据相同的fink文档-“只有eclipsejdt编译器保留了安全使用整个lambda表达式特性类型所必需的泛型类型信息。”
因此,为了解决您的问题,您可以在pom.xml中手动添加以下信息,以便maven使用eclipse jdt编译器-

<!-- put these lines under "project/build/pluginManagement/plugins" of your pom.xml -->

<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>0.21.0</version>
    </dependency>
  </dependencies>
</plugin>

有关更多信息,请参阅此链接-https://ci.apache.org/projects/flink/flink-docs-release-1.3/dev/java8.html

相关问题