1、IntCounterAccumulator
/**
* 4> process=>a
* 5> process=>b
* 6> process=>c
* 7> process=>d
* 8> process=>e
* 总计输入的单词数量=>5
*/
public class _01_IntCounterAccumulator {
public static void main(String[] args) throws Exception {
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
DataStreamSource<String> source = env.socketTextStream("localhost", 8888);
// 创建累加器对象
IntCounter wordCounter = new IntCounter();
SingleOutputStreamOperator<String> process = source.process(new ProcessFunction<String, String>() {
@Override
public void open(Configuration parameters) throws Exception {
// 注册累加器对象
getRuntimeContext().addAccumulator("word_count",wordCounter);
}
@Override
public void processElement(String value, ProcessFunction<String, String>.Context ctx, Collector<String> out) throws Exception {
wordCounter.add(1);
out.collect("process=>"+value);
}
});
process.print();
JobExecutionResult jobExecutionResult = env.execute();
Integer wordCount = jobExecutionResult.getAccumulatorResult("word_count");
System.out.println("总计输入的单词数量=>"+wordCount);
}
}
2、DoubleCounterAccumulator
import org.apache.flink.api.common.JobExecutionResult;
import org.apache.flink.api.common.accumulators.DoubleCounter;
import org.apache.flink.configuration.Configuration;
import org.apache.flink.streaming.api.datastream.DataStreamSource;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.streaming.api.functions.ProcessFunction;
import org.apache.flink.util.Collector;
/**
* 6> process=>a
* 2> process=>b
* 4> process=>c
* 5> process=>d
* 1> process=>e
* DoubleCounter的累加器结果为=>5.0
*/
public class _02_DoubleCounterAccumulator {
public static void main(String[] args) throws Exception {
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
DataStreamSource<String> source = env.socketTextStream("localhost", 8888);
DoubleCounter doubleCounter = new DoubleCounter();
source.keyBy(e->e).process(new ProcessFunction<String, String>() {
@Override
public void open(Configuration parameters) throws Exception {
getRuntimeContext().addAccumulator("wordcount",doubleCounter);
}
@Override
public void processElement(String value, ProcessFunction<String, String>.Context ctx, Collector<String> out) throws Exception {
doubleCounter.add(1.0);
out.collect("process=>"+value);
}
}).print();
JobExecutionResult jobExecutionResult = env.execute();
Double wordcount = jobExecutionResult.getAccumulatorResult("wordcount");
System.out.println("DoubleCounter的累加器结果为=>"+wordcount);
}
}
3、LongCounterAccumulator
import org.apache.flink.api.common.JobExecutionResult;
import org.apache.flink.api.common.accumulators.LongCounter;
import org.apache.flink.configuration.Configuration;
import org.apache.flink.streaming.api.datastream.DataStreamSource;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.streaming.api.functions.ProcessFunction;
import org.apache.flink.util.Collector;
/**
* 6> process=>a
* 2> process=>b
* 4> process=>c
* 5> process=>d
* 1> process=>e
* LongCounter的累加器结果为=>5
*/
public class _03_LongCounterAccumulator {
public static void main(String[] args) throws Exception {
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
DataStreamSource<String> source = env.socketTextStream("localhost", 8888);
LongCounter longCounter = new LongCounter();
source.keyBy(e -> e)
.process(new ProcessFunction<String, String>() {
@Override
public void open(Configuration parameters) throws Exception {
getRuntimeContext().addAccumulator("wordcount", longCounter);
}
@Override
public void processElement(String value, ProcessFunction<String, String>.Context ctx, Collector<String> out) throws Exception {
longCounter.add(1L);
out.collect("process=>" + value);
}
}).print();
JobExecutionResult jobExecutionResult = env.execute();
Long wordcount = jobExecutionResult.getAccumulatorResult("wordcount");
System.out.println("LongCounter的累加器结果为=>" + wordcount);
}
}