尽管在mapWithState中它们是相同的,但为什么要打印所有元素

时间:2016-06-29 09:02:54

标签: java apache-spark apache-kafka spark-streaming

我将同一个对象发送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)

1 个答案:

答案 0 :(得分:2)

它没有保存三次。您已经返回了在功能结束时创建的Tuple2对象,而这正是打印出来的对象。如果您想查看已保存的内部状态,请在图表中使用JavaMapWithStateDStream.stateSnapshots,而不是重复mapWithState的输出。