2017-11-03 3 views
0

Ich benutze die Funktion anwenden, um eindeutige Anzahl zu erhalten. Aber ich möchte die Zählung sammeln, wenn sich die Anzahl der eindeutigen Daten ändert.sammeln Sie die Daten vor dem Ende der Zeitfenster in flink

Code:

hashMap  
.keyBy(x => x.hash)  
.timeWindow(Time.minutes(15)) 
.apply(new DataWindow()) 

Aber anwenden Funktion ausgelöst wird, wenn das Zeitfenster Ende, wie kann ich den Wert häufiger ohne Schiebefenster erhalten.

Antwort

0

Ich würde empfehlen, ein ProcessFunction anstelle eines Fensters zu verwenden. Sie möchten die Schlüsselpartitionierung state verwenden, um die Datenstruktur beizubehalten, die Sie zum Verfolgen der eindeutigen Werte verwenden. Sie können entweder einen Ereigniszeittimer oder einen Verarbeitungszeittimer verwenden, um den Status alle 15 Minuten zu löschen, je nachdem, welche Art von Zeit für Ihre Anwendung geeignet ist.

Aber wenn Sie bei der Fensterung bleiben möchten, können Sie eine benutzerdefinierte Trigger implementieren. In diesem Fall müssten Sie Ihren Status in der partitioned state auf dem TriggerContext verfügbar halten. Siehe auch more info about windows and triggers.

Verwandte Themen