使用Apache Flink,我如何按时加入zip两个流?

时间:2016-04-22 12:16:11

标签: apache-flink flink-streaming

我有两个流。它们都是1小时窗口的聚合数据。我想压缩这些流,因此在相同的时间跨度上的聚合被组合在一起,如果现在存在这样的相应的匹配,则可能具有空值。

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 个答案:

答案 0 :(得分:1)

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