3

私の 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() を呼び出すことで取得できます。

4

1 に答える 1