我将同一个对象发送3次到JavaPairDStream。我更新了它的状态,但它保存了3次。打印JavaPairDStream确认了这一点。
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;
}
};
打印流:
(com.input.InputMessageKey@220593a0,com.input.InputMessage@781bfd72)
(com.input.InputMessageKey@220593a0,com.input.InputMessage@781bfd72)
(com.input.InputMessageKey@220593a0,com.input.InputMessage@781bfd72)
答案 0 :(得分:2)
它没有保存三次。您已经返回了在功能结束时创建的Tuple2
对象,而这正是打印出来的对象。如果您想查看已保存的内部状态,请在图表中使用JavaMapWithStateDStream.stateSnapshots
,而不是重复mapWithState
的输出。