mapWithState

时间:2018-08-09 14:45:39

标签: apache-spark spark-streaming

我正在使用mapWithState,如下所示:

rtStream
                .mapToPair(record -> new Tuple2<String, Object>(record.getEmployeeID(), record.value()))
                .mapWithState(StateSpec.function(updateDataFunc).numPartitions(32)).
                foreachRDD(rdd -> {
                //implement the logic
                };

我的函数“ updateDataFunc”仅返回更新的键,并且我在逻辑中使用该数据。 到目前为止一切顺利。 在我的逻辑中(在foreachRDD内)的某个时刻,我需要状态中存储的所有数据,经过一番研究后,我发现可以使用stateSnapshots()方法获取状态中的所有数据。

但是,我不能仅在foreachRdd中仅为其中一个迭代调用此方法(或者我可以??)。我认为我需要将此方法与流链接起来,如下所示:

rtStream
    .mapToPair(record -> new Tuple2<String, Object>(record.getEmployeeID(), record.value()))                            .mapWithState(StateSpec.function(updateDataFunc).numPartitions(32))
    .stateSnapshots()
    .foreachRDD(rdd -> {
                                //implement the logic
                                };

但这实际上违背了我的目的,因为,现在我将在每个RDD中获取状态的完整快照。 有什么建议吗?

0 个答案:

没有答案