2017-11-20 9 views
2

大きな状態(メモリに収まらない)のカスタム演算子を実装しています。私はこの目的のためにListStateを使用しようとしています。 snapshotStateのhttps://ci.apache.org/projects/flink/flink-docs-release-1.3/dev/stream/state.html#using-managed-operator-stateListStateからの選択項目の削除

実装(で述べたように、私は上記のリンクに)

checkpointedState = context.getOperatorStateStore().getListState(descriptor); 

を使用してい はcheckpointedStateをクリアした後checkpointedStateにメモリ内のデータ構造の要素を追加します。

代わりに、私はsnapshotStateで以下のようなもの()が必要です。)(checkpointedStateための特定のエントリを削除する代わりに、明確な

  1. を。
  2. メモリ内のデータ構造からcheckpointedStateに新しい要素を追加します。

ListStateからアイテムを選択的に削除する方法はありますか?

答えて

2

いいえ、残念ながら、特定の要素を削除することはできません。ListState 特定のリストエントリを保持したい場合は、ListStateをクリアしてから後で再度挿入する前に、それらをコレクションにフェッチする必要があります。

参照する例では、すべての状態オブジェクトはbufferedElements変数に格納され、チェックポイントの実行時にはListStateにのみ挿入されます。つまり、オペレータの完全な状態は、常にbufferedElementsのJVMヒープに格納されます。 ListStateの中にオペレータ状態の一部を格納することはできますが(ヒープに保持するのではなく)、イテレータをトラバースする必要があるため個々の要素にアクセスするにはかなりのコストがかかります。

関連する問題