class SplitBasedHashPartitioner extends MultiTableRangePartitioner implements Configurable, DelegatePartitioner {

    @Override
    public int getPartition(BulkIngestKey bKey, Value value, int numPartitions) {
        int indexWithinSplits = super.getPartition(bKey, value, numPartitions);
        // ensure this returns a positive value. note Math.abs does not always return a positive number
        int offsetWithinPartitionerSpace = (bKey.getKey().hashCode() & Integer.MAX_VALUE) % spaceMultiplier;
        int selectedPartitioner = indexWithinSplits * spaceMultiplier + offsetWithinPartitionerSpace;
        return selectedPartitioner % numPartitions;
    }

}