私の mapreduce ジョブでは、いくつかの行を出力したいだけです。
しかし、次のようにコーディングすると: context.write(data, null);
プログラムは java.lang.NullPointerException をスローします。
以下のようなコーディングはしたくありません: context.write(data, new Text(""));
出力ファイルのすべての行の空白を削除する必要があるためです。
それを解決する良い方法はありますか?前もって感謝します。
申し訳ありませんが、それは私の間違いです。プログラムを注意深くチェックしたところ、Reducer をコンバイナーとして設定したことが原因であることがわかりました。
コンバイナーを使用しない場合、ステートメント context.write(data, null); レデューサーで正常に動作します。出力データ ファイルには、データ行だけがあります。
Hadoop 決定版ガイドから NullWritable の説明を共有します。
NullWritable は、シリアル化の長さがゼロであるため、特別なタイプの Writable です。ストリームにバイトが書き込まれたり、ストリームから読み取られたりすることはありません。これはプレースホルダーとして使用されます。たとえば、MapReduce では、その位置を使用する必要がない場合、キーまたは値を NullWritable として宣言できます。これにより、定数の空の値が効果的に格納されます。キーと値のペアではなく、値のリストを格納する場合は、NullWritable を SequenceFile のキーとして使用することもできます。これは不変のシングルトンです。インスタンスは NullWritable.get() を呼び出すことで取得できます。