Ubuntu16.04 LTS Spark中zlib缺失报错及Python编译选项问题求助
解决Ubuntu 16.04 LTS下Spark调用countByValue()的zlib缺失问题
这个错误本质是你的Python解释器没有编译zlib支持,而Spark在执行countByValue()时会依赖zlib处理压缩数据,所以触发了zipimport.ZipImportError。下面一步步帮你解决:
第一步:安装系统级zlib开发依赖
首先得确保系统已经安装了zlib的开发包,这是Python编译或修复zlib支持的前提:
sudo apt-get update sudo apt-get install zlib1g-dev
第二步:修复Python的zlib支持
根据你使用的Python类型,选择对应的修复方式:
情况1:你自己编译安装的Python
之前遇到的--with-zlib-dir未识别问题,是因为新版Python的configure脚本已经不需要这个参数(系统默认路径下的zlib会被自动检测到)。按以下步骤重新编译:
- 进入你的Python源码目录,清理旧编译残留:
make clean - 重新配置编译选项(自动检测zlib):
./configure --enable-optimizations - 编译并安装(用
altinstall避免覆盖系统默认Python):make -j$(nproc) sudo make altinstall
情况2:使用系统自带的Python
如果是系统预装的Python出现zlib损坏,直接重新安装对应版本即可:
- 针对Python 2.7:
sudo apt-get install --reinstall python2.7 python2.7-dev - 针对Python 3.5(Ubuntu 16.04默认Python3版本):
sudo apt-get install --reinstall python3.5 python3.5-dev
情况3:使用虚拟环境/conda环境
- 如果你用的是
virtualenv,确保虚拟环境基于已经修复好zlib支持的Python创建,或者重新创建虚拟环境。 - 如果你用的是conda环境,直接安装zlib即可:
conda install zlib
第三步:验证修复效果
打开Python终端,执行以下代码验证zlib是否正常加载:
import zlib print(zlib.ZLIB_VERSION)
如果没有报错并输出zlib版本号,说明修复成功。
第四步:确保Spark使用正确的Python解释器
最后,要让Spark使用你修复好的Python,可通过设置环境变量指定:
# 替换成你修复后的Python路径,比如/usr/bin/python3或自定义编译路径 export SPARK_PYTHON=/usr/bin/python3
如果想永久生效,可将上述命令添加到spark-env.sh配置文件中(通常在Spark的conf目录下,若没有则复制spark-env.sh.template重命名)。
完成以上步骤后,再调用Spark的countByValue()函数应该就不会再出现zlib相关的错误了。
内容的提问来源于stack exchange,提问作者Jiteesh
相关产品推荐
相关产品推荐

