/**
  * Hashes a filename into the corresponding local directory, in a manner consistent with Spark's
  * DiskBlockManager.getFile().
  */
 @VisibleForTesting
 static File getFile(String[] localDirs, int subDirsPerLocalDir, String filename) {
   int hash = JavaUtils.nonNegativeHash(filename);
   String localDir = localDirs[hash % localDirs.length];
   int subDirId = (hash / localDirs.length) % subDirsPerLocalDir;
   return new File(new File(localDir, String.format("%02x", subDirId)), filename);
 }