[
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)