static ParquetMetadata mergeFooters(Path root, List<Footer> footers) {
   String rootPath = root.toUri().getPath();
   GlobalMetaData fileMetaData = null;
   List<BlockMetaData> blocks = new ArrayList<BlockMetaData>();
   for (Footer footer : footers) {
     String footerPath = footer.getFile().toUri().getPath();
     if (!footerPath.startsWith(rootPath)) {
       throw new ParquetEncodingException(
           footerPath + " invalid: all the files must be contained in the root " + root);
     }
     footerPath = footerPath.substring(rootPath.length());
     while (footerPath.startsWith("/")) {
       footerPath = footerPath.substring(1);
     }
     fileMetaData = mergeInto(footer.getParquetMetadata().getFileMetaData(), fileMetaData);
     for (BlockMetaData block : footer.getParquetMetadata().getBlocks()) {
       block.setPath(footerPath);
       blocks.add(block);
     }
   }
   return new ParquetMetadata(fileMetaData.merge(), blocks);
 }