2017-08-01 85 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