Leere Ausgabe für die Aggregation von Wasserzeichen im Append Mode

8

Ich benutze Spark 2.2.0-rc1.

Ich habe eine Kafka topic , die eine laufende mit Wasserzeichen versehene Aggregation abfragt, mit einem 1 minute -Wasserzeichen, das an console mit append output mode ausgegeben wird.

%Vor%

Ich dränge folgende Daten in Kafka topic :

%Vor%

Und ich bekomme folgende Ausgabe:

%Vor%

Ist das erwartetes Verhalten?

    
himanshuIIITian 07.06.2017, 04:45
quelle

2 Antworten

7

Wenn Sie mehr Daten an Kafka senden, sollte Spark eine Ausgabe auslösen. Das aktuelle Verhalten ist total wegen der internen Implementierung.

Wenn Sie einige Daten übertragen, generiert StreamingQuery einen auszuführenden Stapel. Wenn dieser Stapel abgeschlossen ist, wird die maximale Ereigniszeit in diesem Stapel gespeichert. Dann in der nächsten Charge, Da Sie append mode verwenden, verwendet StreamingQuery die maximale Ereigniszeit und das Wasserzeichen, um alte Werte aus StateStore zu entfernen und auszugeben. Daher müssen Sie sicherstellen, dass mindestens zwei Stapel generiert werden, damit die Ausgabe angezeigt wird.

    
zsxwing 08.06.2017, 20:19
quelle
2

Hier ist meine beste Schätzung:

Append-Modus gibt nur die Daten aus, nachdem das Wasserzeichen abgelaufen ist (z. B. in diesem Fall 1 Minute später). Sie haben keinen Trigger festgelegt (z. B. .trigger(Trigger.ProcessingTime("10 seconds") ). Standardmäßig werden die Stapel so schnell wie möglich ausgegeben. Also sollten in der ersten Minute alle Ihre Chargen leer sein, und die erste Charge nach einer Minute sollte etwas Inhalt enthalten.

Eine andere Möglichkeit ist, dass Sie groupBy("time") anstelle von groupBy(window("time", "[window duration]")) verwenden. Ich glaube, Wasserzeichen sollen mit Zeitfenstern oder mapGroupsWithState verwendet werden, also bin ich nicht so, wie die Interaktion in diesem Fall funktioniert.

    
Ray J 08.08.2017 22:56
quelle