code: private void init(final Map<DistributedDataSetPartition, InputSplit[]> splitsPerPartition) {
      final Pair<InputSplit[], DistributedDataSetPartition[]>
                                        splitsAndPartitions = getSplitsAndPartitions(splitsPerPartition);
      final InputSplit[] splits = splitsAndPartitions.getFirst();
      final DistributedDataSetPartition[] partitions = splitsAndPartitions.getSecond();
      Validate.isTrue(splits.length == partitions.length);
      for (int splitNum = 0; splitNum < splits.length; splitNum++) {
        LOG.log(Level.FINE, "Processing split: " + splitNum);
        final InputSplit split = splits[splitNum];
        final NumberedSplit<InputSplit> numberedSplit = new NumberedSplit<>(split, splitNum,
            partitions[splitNum]);
        unallocatedSplits.add(numberedSplit);
        updateLocations(numberedSplit);
      }
      if (LOG.isLoggable(Level.FINE)) {
        for (final Map.Entry<String, BlockingQueue<NumberedSplit<InputSplit>>> locSplit : locationToSplits.entrySet()) {
          LOG.log(Level.FINE, locSplit.getKey() + ": " + locSplit.getValue().toString());
        }
      }
    }
docs: Initializes the locations of the splits where we'd like to be loaded into.
  Sets all the splits to unallocated
  
  @param splitsPerPartition
  a map containing the input splits per data partition