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

hla*_*gos 5 snappy parquet apache-beam

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

records.apply(FileIO.<GenericRecord>write().via(ParquetIO.sink(schema)).to(options.getOutput()));
Run Code Online (Sandbox Code Playgroud)

我发现可以将AUTOGZIPBZIP2和设置为压缩,但我无法找到将其设置为 的方法,有什么想法如何做到这一点ZIP?作为参考,可以使用 wrting 到 avro,如下所示DEFLATESNAPPY

records.apply("writeAvro", AvroIO.writeGenericRecords(schema).withCodec(CodecFactory.snappyCodec()).to(options.getOutput()));
Run Code Online (Sandbox Code Playgroud)

Rya*_*aba 2

好消息!在您提出问题后不久,withCompressionCodec(...)编解码器就被添加到 ParquetIO 接收器中。从 Apache Beam 2.11.0 开始可用。

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

幸运的是,ParquetIO 可以防止您犯这个错误。仅暴露正确的压缩配置方法。