Hank created FLINK-23979:
----------------------------

             Summary: Exceptions with Kotlin 1.5.0 and higher
                 Key: FLINK-23979
                 URL: https://issues.apache.org/jira/browse/FLINK-23979
             Project: Flink
          Issue Type: Bug
            Reporter: Hank


*Summary*

keyBy(..) function triggers exceptions when using Kotlin. Different Kotlin 
compiler versions give different exceptions.

 

*Using Kotlin 1.5.20*

 

When using
{code:java}
.keyBy(...){code}
the following runtime exception occurs:

 

 
{code:java}
Exception in thread "main" 
org.apache.flink.api.common.functions.InvalidTypesException: The types of the 
interface org.apache.flink.api.java.functions.KeySelector could not be 
inferred. Support for synthetic interfaces, lambdas, and generic or raw types 
is limited at this point
        at 
org.apache.flink.api.java.typeutils.TypeExtractor.getParameterType(TypeExtractor.java:1244)
        at 
org.apache.flink.api.java.typeutils.TypeExtractor.getParameterTypeFromGenericType(TypeExtractor.java:1268)
        at 
org.apache.flink.api.java.typeutils.TypeExtractor.getParameterType(TypeExtractor.java:1231)
        at 
org.apache.flink.api.java.typeutils.TypeExtractor.privateCreateTypeInfo(TypeExtractor.java:789)
        at 
org.apache.flink.api.java.typeutils.TypeExtractor.getUnaryOperatorReturnType(TypeExtractor.java:587)
        at 
org.apache.flink.api.java.typeutils.TypeExtractor.getKeySelectorTypes(TypeExtractor.java:436)
        at 
org.apache.flink.api.java.typeutils.TypeExtractor.getKeySelectorTypes(TypeExtractor.java:429)
        at 
org.apache.flink.streaming.api.datastream.KeyedStream.<init>(KeyedStream.java:118)
        at 
org.apache.flink.streaming.api.datastream.DataStream.keyBy(DataStream.java:296)
        at FraudDetectionKt.main(FraudDetection.kt:23){code}
 

 

*Using Kotlin 1.5.0*

When using
{code:java}
.keyBy(...)
{code}
Gives the following runtime exception:
{code:java}
Exception in thread "main" org.apache.flink.api.common.InvalidProgramException: 
Object FraudDetectionKt$$Lambda$138/0x00000008001e6440@7d446ed1 is not 
serializable
        at 
org.apache.flink.api.java.ClosureCleaner.ensureSerializable(ClosureCleaner.java:180)
        at 
org.apache.flink.streaming.api.environment.StreamExecutionEnvironment.clean(StreamExecutionEnvironment.java:1901)
        at 
org.apache.flink.streaming.api.datastream.DataStream.clean(DataStream.java:189)
        at 
org.apache.flink.streaming.api.datastream.DataStream.keyBy(DataStream.java:296)
        at FraudDetectionKt.main(FraudDetection.kt:23)
{code}
Using and older version of Kotlin, e.g 1.4.32, this exception does not occur 
and the program runs fine.

 

Some research points this change log that might have something to do with these 
exceptions?

https://kotlinlang.org/docs/whatsnew15.html#lambdas-via-invokedynamic

 



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to