PySpark 是 Spark 提供的基于Python 的API,支持Python2和Python3。在开发 PySpark 应用时,可以调用Python的标准库、第三方库以及自定义模块,提高开发效率。需要注意的是,在本地模式下,直接按照Python脚本风格编写的代码在运行时往往不会有什么问题,但在集群模式下则会触发 ImportError,提示找不到第三方库或模块。这是因为 PySpark 需要在各个执行节点的机器上执行操作,而与操作相关的文件存在本地。要解决这个问题,需要将这些文件发送到各个节点上,具体方法包括:
1. 在集群的各个节点上统一安装需要的第三方库,但是这种方法不能解决自定义模块的相同问题,同时需要较高的操作权限;
2. 让 PySpark 自动添加本地文件到各个节点,这种方法可以解决第三方库和自定义模块的引用错误的问题,同时有两种途径:
(1) 使用 spark-submit 命令行参数 --py-files, 可参考 spark-submit --help
(2) 使用SparkContext实例方法 addPyFile,可参考(http://spark.apache.org/docs/latest/api/python/pyspark.html#pyspark.SparkContext.addPyFile)
在第二种方式下,可以将本地安装的第三方库文件或自定义模块打包成zip文档,但需要注意内部文件的组织结构,确保文件解压后的引用关系成立。以 jieba 为例,可以按照如下方式进行文件打包。