我正在实现具有大状态(可能不适合内存)的自定义运算符。我试图为此目的使用ListState。我在用
checkpointedState = context.getOperatorStateStore().getListState(descriptor);
Run Code Online (Sandbox Code Playgroud)
在上面的链接中实现snapshotState()会清除checkpointedState,然后将内存数据结构中的元素添加到checkpointedState。
相反,我在snapshotState()中需要以下内容:
有什么方法可以有选择地从ListState中删除项目吗?
不,很ListState遗憾,不可能删除特定元素。如果要保留特定的列表条目,则必须先将它们提取到集合中,然后再清除,ListState然后再重新插入。
在您引用的示例中,所有状态对象都存储在bufferedElements变量中,并且仅ListState在完成检查点时才插入到。这意味着,完整的操作符状态始终存储在中的JVM堆上bufferedElements。您也可以将运算符状态的一部分存储在中ListState(而不是将其保存在堆中),但是访问单个元素会非常昂贵,因为您必须遍历迭代器。
| 归档时间: |
|
| 查看次数: |
365 次 |
| 最近记录: |