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

ASF GitHub Bot commented on FLINK-2557:
---------------------------------------

Github user zentol commented on the pull request:

    https://github.com/apache/flink/pull/1045#issuecomment-135370839
  
    @StephanEwen yes, generally InvalidTypesExceptions are not propagated, 
except TypeExtractor.getInfoFor(Class ...), which is both public and used in 
the TypeExtractor. 
    
    If an operator that can't tolerate MissingTypeInfo is given one, when will 
it fail?
    
    There are basically 2 options that i see:
    * keep returning a MissingTypeInfo, but go through call to TypeExtractor 
methods and add a check for MissingTypeInfo if necessary
    * throw a checked exception instead of returning a MissingTypeInfo, and go 
through every call to TypeExtractor methods and add try/catch blocks.
    
    essentially both options are the same, so do we prefer an exception or a 
MissingTypeInfo?
    
    either way, we're gonna need a lot more changes :/


> Manual type information via "returns" fails in DataSet API
> ----------------------------------------------------------
>
>                 Key: FLINK-2557
>                 URL: https://issues.apache.org/jira/browse/FLINK-2557
>             Project: Flink
>          Issue Type: Bug
>          Components: Java API
>            Reporter: Matthias J. Sax
>            Assignee: Chesnay Schepler
>
> I changed the WordCount example as below and get an exception:
> Tokenizer is change to this (removed generics and added cast to String):
> {code:java}
> public static final class Tokenizer implements FlatMapFunction {
>       public void flatMap(Object value, Collector out) {
>               String[] tokens = ((String) value).toLowerCase().split("\\W+");
>               for (String token : tokens) {
>                       if (token.length() > 0) {
>                               out.collect(new Tuple2<String, Integer>(token, 
> 1));
>                       }
>               }
>       }
> }
> {code}
> I added call to "returns(....)" here:
> {code:java}
> DataSet<Tuple2<String, Integer>> counts =
>       text.flatMap(new Tokenizer()).returns("Tuple2<String,Integer>")
>       .groupBy(0).sum(1);
> {code}
> The exception is:
> {noformat}
> Exception in thread "main" java.lang.IllegalArgumentException: The types of 
> the interface org.apache.flink.api.common.functions.FlatMapFunction could not 
> be inferred. Support for synthetic interfaces, lambdas, and generic types is 
> limited at this point.
>       at 
> org.apache.flink.api.java.typeutils.TypeExtractor.getParameterType(TypeExtractor.java:686)
>       at 
> org.apache.flink.api.java.typeutils.TypeExtractor.getParameterTypeFromGenericType(TypeExtractor.java:710)
>       at 
> org.apache.flink.api.java.typeutils.TypeExtractor.getParameterType(TypeExtractor.java:673)
>       at 
> org.apache.flink.api.java.typeutils.TypeExtractor.privateCreateTypeInfo(TypeExtractor.java:365)
>       at 
> org.apache.flink.api.java.typeutils.TypeExtractor.getUnaryOperatorReturnType(TypeExtractor.java:279)
>       at 
> org.apache.flink.api.java.typeutils.TypeExtractor.getFlatMapReturnTypes(TypeExtractor.java:120)
>       at org.apache.flink.api.java.DataSet.flatMap(DataSet.java:262)
>       at 
> org.apache.flink.examples.java.wordcount.WordCount.main(WordCount.java:69)
> {noformat}
> Fix:
> This should not immediately fail, but also only give a "MissingTypeInfo" so 
> that type hints would work.
> The error message is also wrong, btw: It should state that raw types are not 
> supported.
> The issue has been reported here: 
> http://stackoverflow.com/questions/32122495/stuck-with-type-hints-in-clojure-for-generic-class



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to