[ 
https://issues.apache.org/jira/browse/FLINK-7010?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Dawid Wysakowicz resolved FLINK-7010.
-------------------------------------
    Resolution: Not A Problem

> Lamdba expression in flatMap throws InvalidTypesException in DataSet
> --------------------------------------------------------------------
>
>                 Key: FLINK-7010
>                 URL: https://issues.apache.org/jira/browse/FLINK-7010
>             Project: Flink
>          Issue Type: Bug
>            Reporter: Fang Yong
>
> When I create an example and use lambda in flatMap as follows
> {noformat}
>     ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();
>     DataSet<String> source = env.fromCollection(
>         Lists.newArrayList("hello", "flink", "test", "flat", "map", 
> "lambda"));
>     DataSet<Tuple2<Integer, String>> tupled = source.flatMap((word, out) -> {
>       int length = word.length();
>       out.collect(Tuple2.of(length, word));
>     });
>     try {
>       tupled.print();
>     } catch (Exception e) {
>       throw new RuntimeException(e);
>     }
> {noformat}
> InvalidTypesException was throwed and the exception stack is as follows:
> {noformat}
> Caused by: org.apache.flink.api.common.functions.InvalidTypesException: The 
> return type of function 'testFlatMap(FlatMapTest.java:20)' could not be 
> determined automatically, due to type erasure. You can give type information 
> hints by using the returns(...) method on the result of the transformation 
> call, or by letting your function implement the 'ResultTypeQueryable' 
> interface.
>       at org.apache.flink.api.java.DataSet.getType(DataSet.java:178)
>       at org.apache.flink.api.java.DataSet.collect(DataSet.java:407)
>       at org.apache.flink.api.java.DataSet.print(DataSet.java:1605)
> Caused by: org.apache.flink.api.common.functions.InvalidTypesException: The 
> generic type parameters of 'Collector' are missing. 
> It seems that your compiler has not stored them into the .class file. 
> Currently, only the Eclipse JDT compiler preserves the type information 
> necessary to use the lambdas feature type-safely. 
> See the documentation for more information about how to compile jobs 
> containing lambda expressions.
>       at 
> org.apache.flink.api.java.typeutils.TypeExtractor.validateLambdaGenericParameter(TypeExtractor.java:1653)
>       at 
> org.apache.flink.api.java.typeutils.TypeExtractor.validateLambdaGenericParameters(TypeExtractor.java:1639)
>       at 
> org.apache.flink.api.java.typeutils.TypeExtractor.getUnaryOperatorReturnType(TypeExtractor.java:573)
>       at 
> org.apache.flink.api.java.typeutils.TypeExtractor.getFlatMapReturnTypes(TypeExtractor.java:188)
>       at org.apache.flink.api.java.DataSet.flatMap(DataSet.java:266)
> {noformat}
> The 20th line code is
> {noformat}
>  DataSet<Tuple2<Integer, String>> tupled = source.flatMap((word, out) -> { 
> {noformat}
> When I use FlatMapFunction instead of lambda, it will be all right



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Reply via email to