package cn.edu.tju.demo;
import org.apache.flink.api.common.JobExecutionResult;
import org.apache.flink.api.common.accumulators.IntCounter;
import org.apache.flink.api.common.functions.RichMapFunction;
import org.apache.flink.api.java.DataSet;
import org.apache.flink.api.java.ExecutionEnvironment;
import org.apache.flink.api.java.operators.MapOperator;
import org.apache.flink.configuration.Configuration;
import org.apache.flink.streaming.api.datastream.DataStreamSource;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import java.util.Arrays;
import java.util.List;
public class Test30 {
public static void main(String[] args) throws Exception {
ExecutionEnvironment environment = ExecutionEnvironment
.getExecutionEnvironment();
DataSet<String> data = environment.fromElements("a", "b", "c", "d");
MapOperator<String, Object> result = data.map(new RichMapFunction<String, Object>() {
//创建累加器
private IntCounter numLines = new IntCounter();
@Override
public void open(Configuration parameters) throws Exception {
super.open(parameters);
//注册累加器
getRuntimeContext().addAccumulator("num-lines", this.numLines);
}
@Override
public Object map(String value) throws Exception {
//修改累加器中的值
this.numLines.add(1);
return value;
}
}).setParallelism(4);
result.writeAsText("d:\\tool\\demo");
JobExecutionResult jobResult = environment.execute("my job");
//任务执行结束,获取累加器中的值
int num = jobResult.getAccumulatorResult("num-lines");
System.out.println("num : " +num);
}
}