Apache flink 如何对flink中的多字段求和

Apache flink 如何对flink中的多字段求和,apache-flink,Apache Flink,我是Apache Flink 1.10中的sum one字段,如下所示,我接收RabbitMQ消息并在内存中处理,最后保存到MySQL,sum操作代码如下: consumeRecord.keyBy("gameType") .window(TumblingEventTimeWindows.of(Time.seconds(5))) .sum("realPumpAmount") .addSink(new

我是Apache Flink 1.10中的sum one字段,如下所示,我接收RabbitMQ消息并在内存中处理,最后保存到MySQL,sum操作代码如下:

 consumeRecord.keyBy("gameType")
                .window(TumblingEventTimeWindows.of(Time.seconds(5)))
                .sum("realPumpAmount")
                .addSink(new SinkFunction<ReportPump>() {
                    @Override
                    public void invoke(ReportPump value, Context context) throws Exception {
                        // handle sink logic
                    }
                });
consumeRecord.keyBy("gameType")
                .window(TumblingEventTimeWindows.of(Time.seconds(5)))
                .sum("field1","field2")
                .addSink(new SinkFunction<ReportPump>() {
                    @Override
                    public void invoke(ReportPump value, Context context) throws Exception {
                        // handle sink logic
                    }
                });
consumerrecord.keyBy(“游戏类型”)
.window(TumblingEventTimeWindows.of(时间秒(5)))
.sum(“realPumpAmount”)
.addSink(新的SinkFunction(){
@凌驾
公共void调用(ReportPump值、上下文)引发异常{
//句柄接收器逻辑
}
});
现在我想对MQ实体中的多个字段求和,如下所示:

 consumeRecord.keyBy("gameType")
                .window(TumblingEventTimeWindows.of(Time.seconds(5)))
                .sum("realPumpAmount")
                .addSink(new SinkFunction<ReportPump>() {
                    @Override
                    public void invoke(ReportPump value, Context context) throws Exception {
                        // handle sink logic
                    }
                });
consumeRecord.keyBy("gameType")
                .window(TumblingEventTimeWindows.of(Time.seconds(5)))
                .sum("field1","field2")
                .addSink(new SinkFunction<ReportPump>() {
                    @Override
                    public void invoke(ReportPump value, Context context) throws Exception {
                        // handle sink logic
                    }
                });
consumerrecord.keyBy(“游戏类型”)
.window(TumblingEventTimeWindows.of(时间秒(5)))
.sum(“字段1”、“字段2”)
.addSink(新的SinkFunction(){
@凌驾
公共void调用(ReportPump值、上下文)引发异常{
//句柄接收器逻辑
}
});

有什么方法可以实现这个目的吗?

sum
reducer只接受一个字段。你可以自己写这样的东西:

consumeRecord.keyBy("gameType")
    .window(TumblingEventTimeWindows.of(Time.seconds(5)))
    .reduce((d1, d2) -> {
        d1.field1 += d2.field1;
        d1.field2 += d2.field2;
        return d1;
    })
    .addSink(new SinkFunction<ReportPump>() {
        @Override
        public void invoke(ReportPump value, Context context) throws Exception {
            // handle sink logic
        }
    });
consumerrecord.keyBy(“游戏类型”)
.window(TumblingEventTimeWindows.of(时间秒(5)))
.减少((d1,d2)->{
d1.field1+=d2.field1;
d1.field2+=d2.field2;
返回d1;
})
.addSink(新的SinkFunction(){
@凌驾
公共void调用(ReportPump值、上下文)引发异常{
//句柄接收器逻辑
}
});