The generic type parameters of ‘Tuple2‘ are missing. In many cases lambda methods don‘t provide

电玩女神 2023-10-06 21:23 11阅读 0赞

前言

想在使用datastream api 开发的时候,对于多个字段开窗的时候,刚开始是逐个排序,但是影响性能。所以想把两个字段一起来排序,就遇到以下问题。

问题描述
  1. Exception in thread "main" org.apache.flink.api.common.functions.InvalidTypesException:
  2. The generic type parameters of 'Tuple2' are missing.
  3. In many cases lambda methods don't provide enough information
  4. for automatic type extraction when Java generics are involved.
  5. An easy workaround is to use an (anonymous) class instead that implements the '
  6. org.apache.flink.api.java.functions.KeySelector' interface.
  7. Otherwise the type has to be specified explicitly using type information.
  8. at org.apache.flink.api.java.typeutils.TypeExtractionUtils.validateLambdaType(TypeExtractionUtils.java:371)
  9. at org.apache.flink.api.java.typeutils.TypeExtractor.getUnaryOperatorReturnType(TypeExtractor.java:565)
  10. at org.apache.flink.api.java.typeutils.TypeExtractor.getKeySelectorTypes(TypeExtractor.java:412)
  11. at org.apache.flink.api.java.typeutils.TypeExtractor.getKeySelectorTypes(TypeExtractor.java:403)
  12. at org.apache.flink.streaming.api.datastream.KeyedStream.<init>(KeyedStream.java:116)
  13. at org.apache.flink.streaming.api.datastream.DataStream.keyBy(DataStream.java:293)

在这里插入图片描述

解决办法:
  1. // 避免flink java的泛型擦除 写法
  2. SingleOutputStreamOperator<Snapshot> operator = singleOutputStreamOperator.keyBy(new KeySelector<Snapshot, Tuple2<String, String>>() {
  3. @Override
  4. public Tuple2<String, String> getKey(Snapshot snapshot) throws Exception {
  5. return Tuple2.of(snapshot.getDateTime(), snapshot.getHsSecurityId());
  6. }
  7. }).flatMap(new SnapshotProcessFunction());

发表评论

表情:
评论列表 (有 0 条评论,11人围观)

还没有评论,来说两句吧...

相关阅读