2017-04-30 6 views
0

Wie erstellt man Tuple-basierte Schiebefenster in Apache Beam? Dies ist sehr einfach in Flink zu tun:Tuple-basierte Fenster in Apache Beam

DataStream.countWindowAll(long size, long slide) 

Aber es ist unklar, von der Dokumentation für Beam (oder Dataflow), wie dies zu tun. Ist es eine Kombination von Fenstern und Triggern? Ist es effizient?

Antwort

1

Schiebefenster werden nativ in Beam unterstützt. Bitte beachten Sie die programming guide und Dokumentation für die SlidingWindows Klasse.

Z. B .:

PCollection<Foo> foos = ...; 
PCollection<Integer> counts = foos 
    .apply(Window.into(
     SlidingWindows.of(Duration.standardMinutes(5)) 
         .every(Duration.standardMinutes(1)))) 
    // Below is required instead of Count.globally() when you use 
    // a non-global windowing function. 
    .apply(Combine.globally(Count.<Foo>combineFn()).withoutDefaults()); 
PCollection<String> formattedCounts = counts.apply(
     ParDo.of(new DoFn<Integer, String>() { 
      @ProcessElement 
      public void process(ProcessContext c, BoundedWindow w) { 
      c.output("Window: " + w + ", count: " + c.element()); 
      } 
     })); 

Auslösung ist eine separate Dimension des Problems, und sie steuert, wenn die Daten für ein bestimmtes Fenster wird „vollständig genug“ betrachtet werden, die Aggregation anzuwenden. Siehe programming guide.

Verwandte Themen