Python中字符串的解壓縮


今天在用Streaming-Python處理一個MapReduce程序時,發現reducer失敗,原由於耗費內存達到極限了。細致查看代碼時,發現有一個集合里保存着URL,而URL長度是比較長的,直接保存確實是耗費內存,於是想到用壓縮存儲,然后用的時候再解壓,盡管處理時間添加。可是耗費內存大大減少!

詳細就是使用zlib模塊

import zlib
 
raw_data = "hello,world,ooooooooooooxxxxxxxxxxx"
zb_data = zlib.compress(raw_data)
 
print "len(raw_data)=%d, len(zb_data)=%d, compression ratio=%.2f"\
      % (len(raw_data), len(zb_data), float(len(zb_data))/len(raw_data))
 
# len(raw_data)=35, len(zb_data)=25, compression ratio=0.71
raw_data2 = zlib.decompress(zb_data)
print raw_data2


假設存在網絡傳輸。上面的方法可能失效;比如我跑了一個MapReduce,mapper中壓縮,reducer中解壓,結果報錯:

Traceback (most recent call last):
  File "/hadoop/yarn/local/usercache/lming_08/appcache/application_1415110953023_46173/container_1415110953023_46173_01_000018/./build_visitor_company_ulti_info_red.py", line 25, in <module>
    urllist += zlib.decompress(urlitem) + ""
zlib.error: Error -3 while decompressing data: incorrect header check
log4j:WARN No appenders could be found for logger (org.apache.hadoop.hdfs.DFSClient).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
臨時還沒找到有效辦法。


參考: http://my.oschina.net/1123581321/blog/176570


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM