/* Similar to readFile(), tests the scanner created * by record numbers rather than the offsets. */ /// <exception cref="System.IO.IOException"/> internal virtual void ReadRowSplits(int numSplits) { TFile.Reader reader = new TFile.Reader(fs.Open(path), fs.GetFileStatus(path).GetLen (), conf); long totalRecords = reader.GetEntryCount(); for (int i = 0; i < numSplits; i++) { long startRec = i * totalRecords / numSplits; long endRec = (i + 1) * totalRecords / numSplits; if (i == numSplits - 1) { endRec = totalRecords; } TFile.Reader.Scanner scanner = reader.CreateScannerByRecordNum(startRec, endRec); int count = 0; BytesWritable key = new BytesWritable(); BytesWritable value = new BytesWritable(); long x = startRec; while (!scanner.AtEnd()) { Assert.Equal("Incorrect RecNum returned by scanner", scanner.GetRecordNum (), x); scanner.Entry().Get(key, value); ++count; Assert.Equal("Incorrect RecNum returned by scanner", scanner.GetRecordNum (), x); scanner.Advance(); ++x; } scanner.Close(); Assert.True(count == (endRec - startRec)); } // make sure specifying range at the end gives zero records. TFile.Reader.Scanner scanner_1 = reader.CreateScannerByRecordNum(totalRecords, -1 ); Assert.True(scanner_1.AtEnd()); }