如何使用Java在Apache Flink中对DataStream执行平均操作

时间:2019-07-12 11:17:38

标签: java apache-flink

我正在尝试计算Flink中输入数据流(没有窗口)的平均值

我已经使用映射器将流从(key,value)更改为(key,value,1)

现在我需要在第二个字段和第三个字段上求和,并将它们彼此除。

输入数据流来自套接字连接,格式为“ X 5”之类的“键值”

public class AvgViews {

DataStream<Tuple2<String, Double>> AvgViewStream = dataStream
                .map(new AvgViews.RowSplitter())
                .keyBy(0)
                //.??? 



    public static class RowSplitter implements
            MapFunction<String, Tuple3<String, Double, Integer>> {

        public Tuple3<String, Double, Integer> map(String row)
                throws Exception {
            String[] fields = row.split(" ");
            if (fields.length == 2) {
                return new Tuple3<String, Double, Integer>(
                        fields[0],
                        Double.parseDouble(fields[1]),
                        1);
            }
            return null;
        }
    }
}

1 个答案:

答案 0 :(得分:0)

您可以使用使Tuple2保持键控状态的RichMap(或RichFlatMap)。您需要将每个传入记录添加到状态,并发出平均值作为输出。

CountWindowAverage example in the docs的功能类似,但更为复杂。