私は Hadoop で Reducer を作成しており、その入力値を使用して、要素のリストをエンコードするバイト配列を作成しています。データを書き込むバッファーのサイズは、リデューサーが受け取る値の数によって異なります。そのサイズを事前にメモリに割り当てておくと効率的ですが、「foreach」ステートメントで反復処理を行わないと、値がいくつあるかわかりません。
Hadoop 出力は HBase テーブルです。
更新: マッパーでデータを処理した後、リデューサー キーにはべき乗則分布があります。これは、少数のキーのみが多くの値 (最大 9000) を持つことを意味しますが、それらのほとんどは少数の値しか持ちません。4096 バイトのバッファーを割り当てると、97.73% の値が収まることに気付きました。それらの残りの部分については、すべての値が収まるまで、容量が 2 倍のバッファーの再割り当てを試みることができます。私のテストケースでは、キーに 9000 個の値がある最悪のケースでは、メモリを 6 回再割り当てすることでこれを達成できます。