使用Java的lambda编程flink报错,Caused by: org.apache.flink.api.common.functions.InvalidTypesException:

楼主在使用Java的lambda表达式,进行flink编程时报错,如下:

Caused by: org.apache.flink.api.common.functions.InvalidTypesException: The generic type parameters of 'Collector' are missing

Exception in thread "main" org.apache.flink.api.common.functions.InvalidTypesException: The return type of function

异常信息如下:

使用Java的lambda编程flink报错,Caused by: org.apache.flink.api.common.functions.InvalidTypesException:_第1张图片

 

解决方法:需要加上返回值泛型, 举例如下:

flatMap算子,返回类型String

//######flatMap算子的lambda表达式###########
 //注意这里执行算子操作,有两种接受类型的写法,
 //使用DataSet接受,指定的泛型,是每一有一个元素的泛型,类似于RDD中的没有一个元素
 //使用Operator接受,指定类型有两个,输入参数类型,输出参数类型
DataSet words = dataSource.flatMap((FlatMapFunction) (line, out)
// final FlatMapOperator words = dataSource.flatMap((FlatMapFunction) (line, out)
         -> {
     for (String word : line.split(" ")) {
         if (word.trim() != null)   //过滤无效值
             out.collect(word);
     }
 }).returns(Types.STRING);

flatMap算子,返回类型Tuple,

//######flatMap算子的lambda表达式###########
//返回值是Tuple,注意,泛型的指定,FlatMapFunction也要指定的
DataSet> wordsandOnes = dataSource.flatMap((FlatMapFunction>) (line, out)
        -> {
    for (String word : line.split(" ")) {
      //  if (word.trim() != null)   //过滤无效值
         Tuple2 t =  new Tuple2(word,1);
            out.collect(t);
    }
}).returns(Types.TUPLE(Types.STRING,Types.INT));

 

Map算子,返回Tuple

//######Map算子的lambda表达式###########
 //使用lambda表达式,注意要知道返回的类型,否则会报错,另外注意返回是Tuple类型时2,是如何指定的。
final MapOperator> map1 = dataSource
        .map((MapFunction>)(in)
        -> new Tuple2<>(in,1))
        .returns(Types.TUPLE(Types.STRING,Types.INT));

 

 

你可能感兴趣的:(大数据)