我正在使用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中获取状态的完整快照。 有什么建议吗?