code: public void seek(long block, long recordInBlock) throws IOException {
  
  		List<BlockMetaData> blockMetaData = reader.getRowGroups();
  
  		if (block == -1L && recordInBlock == -1L) {
  			// the split was fully consumed
  			currentBlock = blockMetaData.size() - 1;
  			numReadRecords = numTotalRecords;
  			numRecordsUpToCurrentBlock = numTotalRecords;
  			return;
  		}
  
  		// init all counters for the start of the first block
  		currentBlock = 0;
  		numRecordsUpToPreviousBlock = 0;
  		numRecordsUpToCurrentBlock = blockMetaData.get(0).getRowCount();
  		numReadRecords = 0;
  
  		// seek to the given block
  		while (currentBlock < block) {
  			currentBlock++;
  			reader.skipNextRowGroup();
  			numRecordsUpToPreviousBlock = numRecordsUpToCurrentBlock;
  			numRecordsUpToCurrentBlock += blockMetaData.get(currentBlock).getRowCount();
  			numReadRecords = numRecordsUpToPreviousBlock;
  		}
  
  		// seek to and read the given record
  		PageReadStore pages = reader.readNextRowGroup();
  		recordReader = createRecordReader(pages);
  		for (int i = 0; i <= recordInBlock; i++) {
  			readNextRecord();
  		}
  	}
docs: Moves the reading position to the given block and seeks to and reads the given record.
  
  @param block The block to seek to.
  @param recordInBlock The number of the record in the block to return next.