我有一个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
而没有任何特定选项。
如果我用未压缩的版本替换文件,它会起作用,尽管文件大五倍。
是否可以从压缩文件中读取数据?
答案 0 :(得分:0)
确实可以直接从压缩文件中读取。我使用TextIO.Read
和here的代码段完成了这样做:
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)));