如何禁用Parquet.Net的DELTA_BINARY_PACKED编码?升级后文件无法被ParquetViewer读取
解决Parquet.Net 4.16.4生成文件无法被ParquetViewer读取的问题
Parquet.Net 4.16.x版本默认启用了DELTA_BINARY_PACKED编码,而ParquetViewer暂不支持该编码,导致读取时抛出错误。要解决这个问题,你需要在创建ParquetWriter时通过ParquetOptions禁用该编码,具体修改如下:
修改后的完整代码:
private async Task ParquetWriteRowGroup(ParquetSchema schema, List<dynamic> data) { Console.WriteLine($"output file => {OutputFilePath}"); using (Stream fs = File.Open(OutputFilePath, FileMode.CreateNew)) { // 配置Parquet选项,禁用DELTA_BINARY_PACKED编码 var parquetOptions = new ParquetOptions { UseDeltaBinaryPackedEncoding = false }; // 将配置传入CreateAsync方法的重载版本 using (ParquetWriter writer = await ParquetWriter.CreateAsync(schema, fs, parquetOptions)) { writer.CompressionMethod = CompressionMethod.Snappy; using (ParquetRowGroupWriter groupWriter = writer.CreateRowGroup()) { for (int i = 0; i < data.Count; i++) { await groupWriter.WriteColumnAsync(new DataColumn(schema.DataFields[i], data[i])); } } } } }
关键说明:
ParquetOptions需要作为参数传入ParquetWriter.CreateAsync的重载方法,而非在创建后的ParquetWriter实例上设置——该编码选项属于初始化配置,无法在writer创建后修改。- 禁用DELTA_BINARY_PACKED编码后,Parquet.Net会回退使用兼容的编码方式,生成的文件即可被ParquetViewer正常读取。
内容的提问来源于stack exchange,提问作者MKG
相关产品推荐
相关产品推荐

