如何用parquet-tools 1.11.2获取Parquet文件头版本?求替代方案
替代方案:在Parquet-tools 1.11.2中获取文件格式版本
方案1:手动解析Parquet文件头部
Parquet文件的前8字节包含关键版本信息:前4字节是固定魔术数字PAR1,后4字节为小端序存储的文件格式版本号。你可以直接读取这部分内容解析版本:
示例Java代码:
import java.io.RandomAccessFile; import java.nio.ByteBuffer; import java.nio.ByteOrder; public class ParquetVersionReader { public static int getParquetFileVersion(String filePath) throws Exception { try (RandomAccessFile raf = new RandomAccessFile(filePath, "r")) { byte[] headerBytes = new byte[8]; raf.readFully(headerBytes); // 验证是否为合法Parquet文件 String magic = new String(headerBytes, 0, 4); if (!"PAR1".equals(magic)) { throw new IllegalArgumentException("输入不是有效Parquet文件"); } // 解析小端序版本号 ByteBuffer versionBuffer = ByteBuffer.wrap(headerBytes, 4, 4); versionBuffer.order(ByteOrder.LITTLE_ENDIAN); return versionBuffer.getInt(); } } public static void main(String[] args) throws Exception { int version = getParquetFileVersion("target-file.parquet"); System.out.println("Parquet文件格式版本: v" + version); } }
方案2:直接调用parquet-hadoop底层API
parquet-tools 1.11.2依赖的parquet-hadoop库提供了读取元数据的原生API,可绕过tools层直接获取版本:
先确保引入依赖(若未添加):
<dependency> <groupId>org.apache.parquet</groupId> <artifactId>parquet-hadoop</artifactId> <version>1.11.2</version> </dependency>
示例代码:
import org.apache.parquet.hadoop.ParquetFileReader; import org.apache.parquet.hadoop.metadata.ParquetMetadata; import org.apache.hadoop.fs.Path; public class ParquetMetadataReader { public static int getParquetVersion(String filePath) throws Exception { Path file = new Path(filePath); try (ParquetFileReader reader = ParquetFileReader.open(file)) { ParquetMetadata metadata = reader.getFooter(); return metadata.getFileMetaData().getVersion(); } } public static void main(String[] args) throws Exception { int version = getParquetVersion("target-file.parquet"); System.out.println("Parquet文件格式版本: v" + version); } }
方案3:命令行工具查看
如果仅需查看版本无需编码,可使用parquet-tools自带的meta命令,输出中会直接显示版本字段:
parquet-tools meta target-file.parquet
输出示例中会包含类似行:
version: 2
内容的提问来源于stack exchange,提问作者Aravind Yarram
相关产品推荐
相关产品推荐

