私のマップメソッドで行番号を取得できるかどうか疑問に思っていましたか? 私の入力ファイルは、次のような値の単一の列です。
アップル オレンジ バナナ
map メソッドで key: 1, Value: Apple , Key: 2, Value: Orange ... を取得することは可能ですか?
CDH3/CDH4を使用。KeyValueInputFormat を使用するように入力データを変更することはできません。ありがとうございます。
TextInputFormat などの InputFormats のデフォルトの動作は、実際の行番号ではなく、レコードのバイト オフセットを与えることです。これは主に、入力ファイルが分割可能で、2 つ以上で処理されている場合に実際の行番号を特定できないためです。マッパー。
TextInputFormat
独自の InputFormat (および 関連する に基づいてLineRecordReader
) を作成して、バイト オフセットではなく行番号を生成することもできますが、isSplittable
メソッドから false を返すように入力形式を構成する必要があります (つまり、大きな入力ファイルは複数によって処理されません)。マッパー)。小さなファイル、またはサイズが HDFS ブロック サイズに近いファイルがある場合、これは問題になりません。また、分割不可能な圧縮形式 (GZip .gz など) は、とにかくファイル全体が単一のマッパーによって処理されることを意味します。