记个错误:
The generic type parameters of 'Tuple4' are missing. In many cases lambda methods don't provide enough information for automatic type extraction when Java generics are involved.
原由:
这个是因为我在flink中使用了lamdba来返回tuple类型的数据,就报了这个错。
原来的形式:
SingleOutputStreamOperator<Tuple4<String, Long, String, Long>> tupleData = dataSource.map(x -> {
String[] splits = x.split("\t");
String level = splits[2];
String timeStr = splits[3];
Long time = DataUtil.formatDate(timeStr);
String ip = splits[4];
String domain = splits[5];
//流量
Long traffic = Long.parseLong(splits[6]);
return new Tuple4<>(level, time, domain, traffic);
});
这个是错误的,正确的应该是:
SingleOutputStreamOperator<Tuple4<String, Long, String, Long>> tupleData = dataSource.map(x -> {
String[] splits = x.split("\t");
String level = splits[2];
String timeStr = splits[3];
Long time = DataUtil.formatDate(timeStr);
String ip = splits[4];
String domain = splits[5];
//流量
Long traffic = Long.parseLong(splits[6]);
return new Tuple4<>(level, time, domain, traffic);
}).returns(Types.TUPLE(Types.STRING,Types.LONG,Types.STRING,Types.LONG))
我是在mapfunction的时候出现的,从String -》 Tuple4 ,filter函数使用lamdba没有关系,所以我猜测是生产Tuple的时候,会有这个问题。
相关官方文档: