2016-06-29 3 views
0

Ich sende 3 Mal das gleiche Objekt an JavaPairDStream. Ich aktualisiere seinen Zustand, aber es ist 3 mal gespeichert. Das Drucken von JavaPairDStream bestätigt dies.Warum werden alle Elemente gedruckt, obwohl sie in mapWithState identisch sind

Function3<InputMessageKey, Optional<InputMessage>, State<InputMessage>, Tuple2<InputMessageKey, InputMessage>> mappingFunction = new Function3<InputMessageKey, Optional<InputMessage>, State<InputMessage>, Tuple2<InputMessageKey, InputMessage>>() { 
     @Override 
     public Tuple2<InputMessageKey, InputMessage> call(InputMessageKey key, Optional<InputMessage> value, State<InputMessage> state) { 
      InputMessage inputMessage = value.get(); 
      Tuple2<InputMessageKey, InputMessage> output = new Tuple2<>(key, inputMessage); 
      state.update(inputMessage); 
      return output; 
     } 
    }; 

drucken stream:

([email protected],[email protected]) 
([email protected],[email protected]) 
([email protected],[email protected]) 

Antwort

2

Es ist nicht dreimal gespeichert. Sie geben das Objekt Tuple2 zurück, das Sie am Ende der Funktion erstellt haben, und das wird ausgedruckt. Wenn Sie den internen Status anzeigen möchten, der gespeichert wird, verwenden Sie JavaMapWithStateDStream.stateSnapshots in Ihrem Diagramm stattdessen Iterieren die Ausgabe von mapWithState.

+0

Vielen Dank! Das hat mein Problem gelöst! – Vlad

+0

@Vlad Sie sind willkommen. –

Verwandte Themen