我正在尝试使用Snappy压缩在Apache Beam中编写一个镶木地板文件,如下所示
records.apply(FileIO.<GenericRecord>write().via(ParquetIO.sink(schema)).to(options.getOutput()));
我看到可以将AUTO
、GZIP
、BZIP2
、ZIP
和DEFLATE
设置为压缩,但我找不到将其设置为SNAPPY
的方法,有什么想法可以做到这一点吗?作为参考,可以使用wting来avro如下
records.apply("writeAvro", AvroIO.writeGenericRecords(schema).withCodec(CodecFactory.snappyCodec()).to(options.getOutput()));
好消息!在您提出问题后不久,withCompressionCodec(…)
编解码器被添加到ParquetIO接收器中。这可从Apache Beam 2.11.0上获得。
您可能一直在查看FileIO. Write抽象类,这些抽象类允许您使用withCompress(压缩)
,它接受不包含SNAPPY的枚举。如果使用它,它将使用指定的压缩类型压缩整个文件,这不适合Parquet。上面的方法指定了如何在文件内部压缩行组。
幸运的是,ParquetIO可以防止您犯这个错误。只有正确的压缩配置方法才会公开。