2017-08-01 111 views
0
seq 1 1000000 > testfile 

bzip2 -kz9 testfile 
mv testfile.bz2 testfile-bzip2.bz2 

pbzip2 -kzb9 testfile 
mv testfile.bz2 testfile-pbzip2.bz2 

gsutil cp testfile gs://[bucket] 
gsutil cp testfile-bzip2.bz2 gs://[bucket] 
gsutil cp testfile-pbzip2.bz2 gs://[bucket] 

然后我在两个压缩文件上运行以下管道。谷歌数据流只能部分解压压缩文件pbzip2

 p.apply(TextIO.read().from(filePath).withCompressionType(TextIO.CompressionType.BZIP2)) 
     .apply(TextIO. 
       write(). 
       to(filePath.substring(0, filePath.length() - 4)). 
       withoutSharding()); 

导致我的桶的状态如下:

Files after job

正如你可以看到pbzip2压缩解压缩文件太小一直正确地解压缩。看起来只有第一块已经被解压缩了,其余的都被丢弃了。

pbzip2版本:

并行BZIP2 v1.1.12 [2014年12月21日]

bzip2的版本:

bzip2的,一个块排序文件压缩机。版本1.0.6,2010年9月6日。

我正在使用dataflow SDK的2.0.0版本。

我有很多用pbzip2压缩的文件,我宁愿不改变它们被压缩的方式。

有关如何解决此问题的任何建议? 这是否甚至假设使用pbzip2压缩文件?

+0

pbzip是CompressionTypes上列出的类型之一吗?它与bzip2有什么不同? 也许最好的是提交一个针对Beam的错误请求支持PBZIP – Pablo

+0

我已经为此提交了一个jira问题。 Beam的开发人员应该能够解决这些问题。 – Pablo

+0

链接:https://github.com/apache/beam/pull/3669 –

回答

2

这是如何调用BZIP2库来读取PBZIP2生成的文件的一个错误。当我输入此内容时,修复程序正在审查中。见BEAM-2708