class PartitionerCache {

    public List<String> validatePartitioners(String[] tableNames, Job job) {
        ArrayList<String> validTableNames = new ArrayList<>();
        for (String tableName : tableNames) {
            if (hasPartitionerOverride(new Text(tableName))) {
                try {
                    Partitioner<BulkIngestKey,Value> partitionerForTable = cachePartitioner(new Text(tableName));
                    initializeJob(job, partitionerForTable);
                    validTableNames.add(tableName);
                } catch (Exception e) {
                    log.warn("Unable to create the partitioner for " + tableName + " despite its configuration."
                                    + "Will use the default partitioner for this table.", e);
                    lazyInitializeDefaultPartitioner(job);
                }
            } else {
                lazyInitializeDefaultPartitioner(job);
            }
        }
        return validTableNames;
    }

    public  PartitionerCache(Configuration conf);

}