在Python编译的时候加入bz2
Spark执行Python任务时因缺少bz2模块报错,原因是打包的Pythonzip未包含系统动态库libbz2.so。将系统该文件复制到Python源码Lib目录,重新编译并打包上传,即可正常导入bz2模块,解决Spark环境依赖缺失问题。
用Spark配合Python跑任务的时候,有时候会遇到一个挺让人头疼的报错:明明系统里好好的,一执行就提示No module named bz2。别急,这其实跟Spark的Python运行机制有关——问题不在系统,而在你打包的那个Python zip包里。

说起来,Spark为了分布式执行,需要把整个Python环境压缩成zip上传到HDFS。这时候你编译出来的Python(通常放在自定义目录,不影响系统自带的那份)默认是不带bz2模块的。bz2属于系统级动态链接库,系统自带的Python之所以能用,是因为它直接读取了系统的libbz2.so。但你打包进zip的Python,显然没包含这些so文件。
解决方法其实不复杂:把系统里已有的libbz2库文件找出来,塞进Python源码的Lib目录下,再重新编译一次就行。具体操作分两步走——
先用dpkg -L libbz2-1.0定位系统里libbz2.so相关文件的位置。然后把所有的libbz2.so*文件拷贝到你即将编译的Python源码目录下的Lib/目录里(注意是Python源码根目录下的Lib,不是安装后的Lib)。接下来回到Python源码根目录,执行常规编译流程:
cd Python-2.7.12
export PYTHON_ROOT=~/Python
./configure --prefix="${PYTHON_ROOT}" --enable-unicode=ucs4
make
make install
编译完成后,再用这个新生成的Python重新打包zip上传到HDFS,bz2模块就能正常import了。整个过程的关键就一句话:**把系统的动态库提前喂给编译过程**,别让它漏掉。
火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。
















