我有一个谷歌数据流管道,它正在读取我用gsutil cp -Z
上传的文本文件,换句话说,是gzip格式。
当我尝试运行管道(作业 ID 2018-03-21_01_28_54-102058310819679700
(时,出现以下错误:
FailedToDecompressContent: Content purported to be compressed with gzip but failed to decompress.
at HandleExceptionsAndRebuildHttpConnections (/usr/local/lib/python2.7/dist-packages/apitools/base/py/http_wrapper.py:304)
我可以使用gsutil cp
下载文件以将其复制回我的本地计算机。
我在没有任何特定选项的情况下使用ReadFromText
。
如果我用未压缩的版本替换文件,它可以工作,尽管文件是它的五倍大。
是否可以从压缩文件中读取工作?
确实可以直接从压缩文件中读取。我已经按照这里的片段TextIO.Read
这样做了:
Pipeline p = ...;
p.apply(TextIO.Read.named("ReadMyFile")
.from("gs://some/inputData.gz")
.withCompressionType(TextIO.CompressionType.GZIP));
请注意,如果不指定压缩类型,它将默认为AUTO
类型,并推断它是由于扩展名.gz
而压缩的文件。
但是,这似乎现已弃用,文档建议改用Compression
。Beam的存储库中的一个例子:
FileBasedSource<T> mySource = ...;
PCollection<T> collection = p.apply(Read.from(CompressedSource
.from(mySource)
.withCompression(Compression.GZIP)));