Asakusa Framework Advent Calendar 2016の17日目です。
GroupSortやCoGroup演算子では、キー毎にグルーピングされたデータモデルの一覧(List)が渡されてきます。
それらのデータモデルは、デフォルトでは全て別々にインスタンス化されてList内に保持されます。したがって、入力データ量が多いとメモリーが足りなくなってOutOfMemoryErrorになることがあります。
(特によくあるのが、「多くても数件しか無い」と思っていたら、キーがnullのデータが大量にあった!というようなケースですorz)
この場合、GroupSort(やCoGroup)アノテーションにInputBuffer.ESCAPEを設定すると、データモデル1個分しかメモリーを使わなくなります。
データモデル1個分のインスタンスがList内で使いまわされるので、Listから一度に1個しか取得できない(Listから取得した他のデータモデルオブジェクトを保存しておくということが出来なくなる)という制約はありますが。
なお、昨日の『Asakusa on Sparkあるある』で書いたとおり、Asakusa on Sparkでは演算子からの出力データ数が多い場合も問題になることがあります。それへの対処方法は、そちらをご覧下さい。
※コメント投稿者のブログIDはブログ作成者のみに通知されます