繁体   English   中英

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

[英]How to perform average operation on DataStream in Apache Flink using Java

我正在尝试计算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;
        }
    }
}

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

文档中的CountWindowAverage示例执行了类似的操作,尽管稍微复杂一些。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM