確かに、特に線の順番を気にしない場合は、
まず、あなたのマッパーは(line, filename)
ペア発するあります
File A:
(0, "A 1")→("A 1", A)
(4, "B 2")→("B 2", A)
(8, "C 3")→("C 3", A)
File B:
(0, "A 1")→("A 1", B)
(4, "C 3")→("C 3", B)
(8, "D 4")→("D 4", B)
を(これはあなたがのInputFormatとしてTextInputFormat
を使用していると仮定し、その受信したキーがファイル内の位置であるあなたが((FileSplit) context.getInputSplit()).getPath()
とファイル名を取得することができます。
縮小フェーズでは、Hadoopは各キー(行)に関連付けられた値(ファイル名)を収集し、これをレデューサーに渡します。あなたの減速で、あなただけの、ただのファイル名を持つ行を発する、そして他人のために何かを排出しないはずです。
("A 1",{A,B})→nothing
("B 2",{A})→"B 2"
("C 3",{A,B})→nothing
("D 4",{B})→nothing
結果はファイルだけでAある行だけになります。