- 問題如下:項目中有hadoop集羣,有的模塊在寫數據的時候,啓用了spark的壓縮格式:snappy,在讀取的時候,程序解析不了snappy壓縮格式的文件。this version of libhadoop was built without snappy support
- 解決方案:查閱了很多方式,都是說需要裝hadoop,因爲hadoop中是有snappy支持的。但是這個程序是在一個docker容器中,只爲了解壓一個文件而去裝一個hadoop,顯然是不明智的。
對於這個格式的壓縮文件,理想情況是找到一種可以解壓縮的程序,單獨安裝這個程序即可。
這裏是借用了一個python模塊,當然也需要系統模塊的支持。
安裝步驟:
# 系統依賴
yum -y install snappy-devel gcc-c++
# python庫
pip3 install python-snappy
這樣就可以裝好snappy庫了。
這個模塊可以直接在命令行去解壓:
# 解壓縮
python -m snappy -d compress.snappy uncompress_file
# 壓縮
python -m snappy -c uncompress_file compress.snappy
代碼方式:
path = r"D:\test\test\part.snappy"
with open(path, 'rb')as fi, open(path.rstrip(".snappy"), 'wb')as fo:
snappy.hadoop_stream_decompress(fi, fo)
由於我的實際場景是,文件在寫入hdfs的時候被壓縮,所以要調用hadoop_stream,如果本地操作,可以直接調用stream