[英]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.