Python:this version of libhadoop was built without snappy support

  • 問題如下:項目中有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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章