提问者:小点点

在Apache Beam中使用Snappy压缩编写镶木地板文件


我正在尝试使用Snappy压缩在Apache Beam中编写一个镶木地板文件,如下所示

records.apply(FileIO.<GenericRecord>write().via(ParquetIO.sink(schema)).to(options.getOutput()));

我看到可以将AUTOGZIPBZIP2ZIPDEFLATE设置为压缩,但我找不到将其设置为SNAPPY的方法,有什么想法可以做到这一点吗?作为参考,可以使用wting来avro如下

records.apply("writeAvro", AvroIO.writeGenericRecords(schema).withCodec(CodecFactory.snappyCodec()).to(options.getOutput()));

共1个答案

匿名用户

好消息!在您提出问题后不久,withCompressionCodec(…)编解码器被添加到ParquetIO接收器中。这可从Apache Beam 2.11.0上获得。

您可能一直在查看FileIO. Write抽象类,这些抽象类允许您使用withCompress(压缩),它接受不包含SNAPPY的枚举。如果使用它,它将使用指定的压缩类型压缩整个文件,这不适合Parquet。上面的方法指定了如何在文件内部压缩行组。

幸运的是,ParquetIO可以防止您犯这个错误。只有正确的压缩配置方法才会公开。