3

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

4

4 回答 4

6

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

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

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

于 2015-02-06T20:31:28.313 回答
4

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

  • 通过多次应用创建转换(每次对单个文件)为每个文件创建一个 PCollection。
  • 使用Flatten变换创建一个 PCollection,其中包含 PCollection 中代表单个文件的所有文件。
  • 将您的管道应用到此 PCollection。
于 2015-01-05T18:57:34.680 回答
1

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

具体来说——我跑

gsutil -m setmeta -h "Content-Encoding:gzip" -h "Content-Type:text/plain" <path>
于 2015-01-05T08:44:46.850 回答
1

我刚刚注意到,现在可以在最新版本的 SDK (v0.3.150210) 中指定压缩类型。我已经对其进行了测试,并且能够将我的 GZ 文件直接从 GCS 加载到 BQ 而没有任何问题。

于 2015-02-12T08:07:45.817 回答