一、报错截图
二、错误代码
package myflinkDemo;
import org.apache.flink.api.common.functions.FlatMapFunction;
import org.apache.flink.api.java.DataSet;
import org.apache.flink.api.java.ExecutionEnvironment;
import org.apache.flink.api.java.tuple.Tuple2;
import org.apache.flink.util.Collector;
public class BatchWordCount{
public static void main(String[] args) throws Exception {
ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();
DataSet<String> text = env.fromElements(
"Flink batch demo",
"batch demo",
"demo"
);
DataSet<Tuple2<String, Integer>> ds = text.flatMap(new LineSplitter())
.groupBy(0)
.sum(1);
// 错误代码
env.execute();
ds.print();
}
static class LineSplitter implements FlatMapFunction<String, Tuple2<String, Integer>>{
@Override
public void flatMap(String line, Collector<Tuple2<String, Integer>> collector){
for (String word : line.split(" ")){
collector.collect(new Tuple2<>(word, 1));
}
}
}
}
三、错误原因
当DataSet调用print()方法时,源码内部已经调用了Execute方法,因此此处不能调用env.execute()方法,如果调用会出现错误
四、正确代码
package myflinkDemo;
import org.apache.flink.api.common.functions.FlatMapFunction;
import org.apache.flink.api.java.DataSet;
import org.apache.flink.api.java.ExecutionEnvironment;
import org.apache.flink.api.java.tuple.Tuple2;
import org.apache.flink.util.Collector;
public class BatchWordCount{
public static void main(String[] args) throws Exception {
ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();
DataSet<String> text = env.fromElements(
"Flink batch demo",
"batch demo",
"demo"
);
DataSet<Tuple2<String, Integer>> ds = text.flatMap(new LineSplitter())
.groupBy(0)
.sum(1);
// 错误代码
// env.execute();
ds.print();
}
static class LineSplitter implements FlatMapFunction<String, Tuple2<String, Integer>>{
@Override
public void flatMap(String line, Collector<Tuple2<String, Integer>> collector){
for (String word : line.split(" ")){
collector.collect(new Tuple2<>(word, 1));
}
}
}
}