簡體   English   中英

在Apache FLink中的不同窗口上計算指標

[英]Compute metrics on different window in Apache FLink

我正在使用Apache Flink 1.2,這是我的問題:我有一個數據流,我想在1天的時間范圍內計算一個指標。 因此,我將編寫如下內容:

DataStream<Tuple6<Timestamp, String, Double, Double, Double, Integer>> myStream0 = 
            env.readTextFile("Myfile.csv")
            .map(new MyMapper())                // Parse the input
            .assignTimestampsAndWatermarks(new MyExtractor())   //Assign the timestamp of the event 
            .timeWindowAll(Time.days(1))    
            .apply(new average());  // compute average, max, sum

現在,我想在1小時的時間內計算出相同的指標。

我可以像以前一樣編寫並指定Time.hours(1),但是我擔心的是,以這種方式apache flink讀取了兩倍的輸入文件,並且完成了兩倍的工作。 我想知道是否有一種方法可以完成所有的Togheter(即使用相同的流)。

您可以計算小時匯總,也可以從這些每日匯總中計算。 這將尋找一個簡單的DataStream<Double> ,如下所示:

DataStream<Double> vals = ... // source + timestamp extractor

DataStream<Tuple2<Double, Long>> valCnt = vals // (sum, cnt)
  .map(new CntAppender())     // Double -> Tuple2<Double, Long(1)>

DataStream<Tuple3<Double, Long, Long>> hourlySumCnt = valCnt // (sum, cnt, endTime)
  .timeWindowAll(Time.hours(1))
  // SumCounter ReduceFunction sums the Double and Long field (Long is Count)
  // WindowEndAppender WindowFunction adds the window end timestamp (3rd field)
  .reduce(new SumCounter(), new WindowEndAppender())   

DataStream<Tuple2<Double, Long>> hourlyAvg = hourlySumCnt // (avg, endTime)
  .map(new SumDivCnt()) // MapFunction divides Sum by Cnt for average

DataStream<Tuple3<Double, Long, Long>> dailySumCnt = hourlySumCnt // (sum, cnt, endTime)
  .map(new StripeOffTime()) // removes unnecessary time field -> Tuple2<Double, Long>
  .timeWindowAll(Time.days(1))
  .reduce(new SumCounter(), new WindowEndAppender()) // same as above

DataStream<Tuple2<Double, Long>> dailyAvg = dailySumCnt // (avg, endTime)
  .map(new SumDivCnt()) // same as above

因此,您基本上可以計算每個小時的總和和計數,然后根據該結果,

  1. 計算每小時平均值
  2. 計算每日總和和計數以及每日平均值

請注意,我正在使用ReduceFunction而不是WindowFunction進行求和和計數,因為急切地應用了ReduceFunction ,即未收集窗口的所有記錄,而是立即對其進行匯總。 因此,需要維護的狀態是單個記錄。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM