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



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

我使用映射器将流从(键,值(更改为(键,值,1(

现在我需要对第 2 和第 3 字段求和并将它们除以彼此。

输入数据流来自套接字连接,形式为"键值",如"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;
        }
    }
}

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

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

相关内容

  • 没有找到相关文章

最新更新