[ 
https://issues.apache.org/jira/browse/FLINK-6024?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15907412#comment-15907412
 ] 

Aljoscha Krettek commented on FLINK-6024:
-----------------------------------------

Is this for the streaming API?

If yes, then the problem that by not having that public constructor you changed 
your type from being a POJO to a {{GenericType}} which has this {{isKeyType()}} 
implementation:
{code}
@Override
@PublicEvolving
public boolean isKeyType() {
    return Comparable.class.isAssignableFrom(typeClass);
}
{code}

this is true for the batch API but in streaming we just have to check whether 
the type properly implements {{hashCode()}}.

[~kkl0u] If it is in fact for the streaming API does your recent fix solve this 
problem? 

It's still true that we should have better error messages.

> Need more fine-grained info for "InvalidProgramException: This type (...) 
> cannot be used as key"
> ------------------------------------------------------------------------------------------------
>
>                 Key: FLINK-6024
>                 URL: https://issues.apache.org/jira/browse/FLINK-6024
>             Project: Flink
>          Issue Type: Improvement
>          Components: Core
>    Affects Versions: 1.2.0
>            Reporter: Luke Hutchison
>
> I got this very confusing exception:
> {noformat}
> InvalidProgramException: This type (MyType) cannot be used as key
> {noformat}
> I dug through the code, and could not find what was causing this. The help 
> text for type.isKeyType(), in Keys.java:329, right before the exception is 
> thrown, says: "Checks whether this type can be used as a key. As a bare 
> minimum, types have to be hashable and comparable to be keys." However, this 
> didn't solve the problem.
> I discovered that in my case, the error was occurring because I added a new 
> constructor to the type, and I didn't have a default constructor. This is 
> probably quite a common thing to happen for POJOs, so the error message 
> should give some detail saying that this is the problem.
> Other things that can cause this to fail, including that the class is not 
> public, or the constructor is not public, or the key field is not public, or 
> that the key field is not a serializable type, or the key is not Comparable, 
> or the key is not hashable, should be given in the error message instead, 
> depending on the actual cause of the problem.



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

Reply via email to