我刚刚开始学习flink,并尝试构建一个非常基本的玩具示例,该示例随着时间的推移对一个整数求和,并定期打印到目前为止的总和
我创建了一个随机数生成器源类,如下所示:
// RandomNumberSource.java
public class RandomNumberSource implements SourceFunction<Integer> {
public volatile boolean isRunning = true;
private Random rand;
public RandomNumberSource() {
this.rand = new Random();
}
@Override
public void run(SourceContext<Integer> ctx) throws Exception {
while (isRunning) {
ctx.collect(rand.nextInt(200));
Thread.sleep(1000L);
}
}
@Override
public void cancel() {
this.isRunning = false;
}
}
如您所见,它每1秒生成一个随机数
现在我该如何对生成的数字求和呢?
// StreamJob.java
public class StreamingJob {
public static void main(String[] args) throws Exception {
// set up the streaming execution environment
final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
DataStream<Integer> randomNumber = env.addSource(new RandomNumberSource());
// pseudo code:
// randomNumber
// .window(Time.seconds(5))
// .reduce(0, (acc, i) => acc+i) // (initial value, reducer)
// .sum()
// execute program
env.execute("Flink Streaming Random Number Sum Aggregation");
}
}
我添加了伪代码来解释我要做的事情。i、 e每5秒,对所有数字求和并打印出来。
我觉得我的方法中遗漏了一些东西,可能需要一些关于如何做到这一点的指导。
1条答案
按热度按时间kuuvgm7e1#
window
运算符用于键控流。你应该改用windowAll
对于此任务。以下是片段:另外,请检查此项,以参考各种窗口注意事项。