从gsutil -Z上传的文件读取FailedToDecompressContent

时间:2018-03-21 08:58:26

标签: google-cloud-dataflow

我有一个Google Dataflow管道正在读取我使用const MyGameContext = React.createContext(); const UserInfoContext = React.createContext(); 上传的文本文件,换句话说是gzip格式。

当我尝试运行管道(作业ID gsutil cp -Z)时,我收到以下错误:

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而没有任何特定选项。

如果我用未压缩的版本替换文件,它会起作用,尽管文件大五倍。

是否可以从压缩文件中读取数据?

1 个答案:

答案 0 :(得分:0)

确实可以直接从压缩文件中读取。我使用TextIO.Readhere的代码段完成了这样做:

Pipeline p = ...;
p.apply(TextIO.Read.named("ReadMyFile")
                   .from("gs://some/inputData.gz")
                   .withCompressionType(TextIO.CompressionType.GZIP));

请注意,如果您未指定压缩类型,则会默认为AUTO类型,并且由于.gz扩展名而推断它是一个gzip压缩文件。

但是,现在似乎是deprecated,文档建议改为使用Compression。 Beam的repo中的一个例子:

FileBasedSource<T> mySource = ...;
PCollection<T> collection = p.apply(Read.from(CompressedSource
    .from(mySource)
    .withCompression(Compression.GZIP)));