2016-04-22 67 views
3

我有两条流。它们都是在1小时窗口内汇总的数据。我想压缩这些流,以便在相同的时间范围内进行聚合,如果现在存在这样的相对匹配,可能会使用空值。使用Apache Flink,我如何按时加入zip两个流?

DataStream<OneHourAggA> one = 
    sourceA 
     .keyBy(d -> (String) d.values.get("m")) 
     .timeWindow(Time.hours(1)) 
     .apply(new WorkWindwFolder()); 

DataSteam<OneHourAggB> other = 
    sourceB 
     .keyBy(d -> (String) d.values.get("m")) 
     .timeWindow(Time.hours(1)) 
     .apply(new WorkWindwFolder()); 

DataStream<Tuple2<Option<OneHourAggA>,Option<OneHourAggB>> zipped = 
    sourceA.???(sourceB) 

我该如何做到这一点?

回答

1

您将不得不使用coGroup操作来执行聚合结果的外连接。您将为coGroup操作使用相同的时间窗口规范。这是有效的,因为前面的窗口的聚合结果只会为每个窗口生成一个元素,并且此元素将获得分配此窗口的最大时间戳。