Uploaded image for project: 'Flink'
  1. Flink
  2. FLINK-6114

Type checking fails with generics, even when concrete type of field is not needed

    XMLWordPrintableJSON

Details

    Description

      The Flink type checker does not allow generic types to be used in any field of a tuple when a join is being executed, even if the generic is not in a field that is involved in the join.

      I have a type Tuple3<String, K, Float>, which contains a generic type parameter K. I am joining using .where(0).equalTo(0). The type of field 0 is well-defined as String. However, this gives me the following error:

      Exception in thread "main" org.apache.flink.api.common.functions.InvalidTypesException: Type of TypeVariable 'K' in 'public static org.apache.flink.api.java.DataSet mypkg.MyClass.method(params)' could not be determined. This is most likely a type erasure problem. The type extraction currently supports types with generic variables only in cases where all variables in the return type can be deduced from the input type(s).
      	at org.apache.flink.api.java.typeutils.TypeExtractor.createSubTypesInfo(TypeExtractor.java:989)
      

      The code compiles fine, however – the static type system is able to correctly resolve the types in the surrounding code.

      Really only the fields that are affected by joins (or groupBy, aggregation etc.) should be checked for concrete types in this way.

      Attachments

        Activity

          People

            Unassigned Unassigned
            lukehutch Luke Hutchison
            Votes:
            0 Vote for this issue
            Watchers:
            4 Start watching this issue

            Dates

              Created:
              Updated: