从Dataflow中的压缩文件中读取

时间:2015-01-01 19:06:40

标签: google-cloud-dataflow

是否有办法(或任何类型的黑客)从压缩文件中读取输入数据? 我的输入包含几百个文件,这些文件是用gzip压缩生成的,解压缩它们有点单调乏味。

谢谢, Genady

4 个答案:

答案 0 :(得分:6)

Dataflow现在支持从压缩文本源读取(截至this commit)。具体来说,可以通过指定压缩类型来读取使用gzip和bzip2压缩的文件:

TextIO.Read.from(myFileName).withCompressionType(TextIO.CompressionType.GZIP)

但是,如果文件具有.gz或.bz2扩展名,则您没有执行任何操作:默认压缩类型为AUTO,它会检查文件扩展名以确定文件的正确压缩类型。这甚至适用于globs,其中glob产生的文件可能是.gz,.bz2和未压缩的混合。

答案 1 :(得分:3)

我的工作性能下降很可能是因为Dataflow将大部分文件放在同一个分区中,因此它们并没有被并行处理。您可以尝试以下方法来加快速度。

  • 通过多次应用Create转换(每次都应用于单个文件)为每个文件创建一个PCollection。
  • 使用Flatten转换创建一个PCollection,其中包含表示单个文件的PCollections中的所有文件。
  • 将您的管道应用于此PCollection。

答案 2 :(得分:1)

我还发现,对于驻留在云存储中的文件,设置内容类型和内容编码似乎“正常工作”而无需解决方法。

具体 - 我跑

gsutil -m setmeta -h "Content-Encoding:gzip" -h "Content-Type:text/plain" <path>

答案 3 :(得分:1)

我刚才注意到,最新版本的SDK(v0.3.150210)现在提供了指定压缩类型的功能。我已经对它进行了测试,并且可以直接从GCS加载我的GZ文件到BQ。