簡體   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