/usr/bin/python: can't decompress data; zlib not available 的異常處理
1. 問題背景
使用Pycharm連線遠端伺服器端pipenv虛擬環境的python直譯器,執行python spark指令碼時報錯如下錯誤:
2018-09-12 23:56:00 ERROR Executor:91 - Exception in task 0.0 in stage 0.0 (TID 0)org.apache.spark.SparkException: Error from python worker: /usr/bin/python: can't decompress data; zlib not availablePYTHONPATH was: /home/kangwang/.local/share/virtualenvs/pyspark-C8JL9jUk/lib/python3.5/site-packages/pyspark/python/lib/pyspark.zip:/home/kangwang/.local/share/virtualenvs/pyspark-C8JL9jUk/lib/python3.5/site-packages/pyspark/python/lib/py4j-0.10.7-src.zip:/home/kangwang/.local/share/virtualenvs/pyspark-C8JL9jUk/lib/python3.5/site-packages/pyspark/jars/spark-core_2.11-2.3.1.jar:/home/kangwang/.pycharm_helpers/pycharm_matplotlib_backend:/home/kangwang/myproject/pysparkjava.io.EOFException at java.io.DataInputStream.readInt(DataInputStream.java:392)
2. 問題分析
我是用pipenv在個人目錄 myproject/pyspark下建立的虛擬環境,用來存放pyspark工程,其中python3.5直譯器的安裝路徑為下面所示:
根據報錯資訊,可能是缺少相關依賴包,根據這篇部落格https://blog.csdn.net/iejtyq/article/details/64438398 的做法,發現問題並沒有得到解決,繼續觀察報錯資訊,發現其中的python直譯器路徑與我虛擬環境裡的路徑不一致,所以會不會是直譯器的問題了呢?
在伺服器的虛擬環境下按以下方式執行test.py檔案,發現並無報錯。由此,結合上面報錯資訊,可知報錯原因是Pycharm在Run test.py 時並沒有成功使用虛擬環境下的python直譯器。
3. 解決辦法
把虛擬環境下的python直譯器加到pycharm中.py指令碼的環境變數中,即 PATH=/home/kangwang/.local/share/virtualenvs/pyspark-C8JL9jUk/bin:$PATH
具體步驟為1~7步:
以上,就是這個指令碼的環境變數配置過程。
如果工程下的指令碼都在伺服器同一個虛擬環境下執行,採用上面那樣一個一個指令碼配置環境變數的方法會很繁瑣,因此,可對整個工程下的環境變數進行設定:
注意:工程下的環境變數的設定後,在該工程下建立新的.py檔案時會自動新增已有的環境變數配置。然而,當重啟Pycharm並再次進去該工程下建立新的.py檔案時,之前設定的工程下的環境變數將失效,即不會儲存。所以,在重啟pycharm後,還需要再次重複上面8~15步。