问题:在工作中,使用spark-summit部署python第三方库保存的xgboost模型(单机库模型,非xgboost-4j),运行出错,ImportError: No module name xxxx。使用第三方库有:pandas、numpy、xgboost。因为没有集群权限,模型安装流程复杂,尝试自己探索解决,看了国内外很多帖子,大致有3种情况:
- 单一文件
- 自建模块 或 python简单第三方库(不含.so文件)
- python复杂第三方库(含.so文件,即动态加载库,如numpy、pandas、xgboost)
1、单一文件
(1)使用spark-submit命令中的--py-files选项并指定文件的本地路径,将依赖文件提供给所有的执行程序。其中,dependency.py为依赖文件,script.py为主程序文件,均可以只放置在本地,提交任务后会上传集群。
spark/bin/spark-submit \
--master yarn \
--deploy-mode cluster \
--py-files dependency.py \
script.py
(2)在代码中使用sc.addPyFiles(path)函数,将所需文件添加到SparkContext。
sc = SparkContext(master=”yarn-cluster”,appName=”myApp”)
sc.addPyFile(f