RecordReader の「getPos」は、時間の経過とともに変更されました。
古い mapred RecordReader 実装では、読み取られたバイト数をカウントするために使用されていました。
/**
* Returns the current position in the input.
*
* @return the current position in the input.
* @throws IOException
*/
long getPos() throws IOException;
新しい mapreduce RecordReader 実装では、この情報は RR クラスによって提供されませんが、FSInputStream 実装の一部です。
class LocalFSFileInputStream extends FSInputStream implements HasFileDescriptor {
private FileInputStream fis;
private long position;
public LocalFSFileInputStream(Path f) throws IOException {
this.fis = new TrackingFileInputStream(pathToFile(f));
}
@Override
public void seek(long pos) throws IOException {
fis.getChannel().position(pos);
this.position = pos;
}
@Override
public long getPos() throws IOException {
return this.position;
}
したがって、新しい mapreduce API では、RecordReader が抽象化され、必ずしも getPos() が返されるとは限りません。この基礎となる実装を使用する可能性のある RecordReaders の新しい実装は、getPos() を提供する FSInputStream オブジェクトを直接使用するように書き直すことができます。