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 available
PYTHONPATH 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/pyspark
java.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步。