将 python 依赖项提交到 spark 集群中

Posted

技术标签:

【中文标题】将 python 依赖项提交到 spark 集群中【英文标题】:Submit python dependencies into spark cluster 【发布时间】:2019-02-07 12:23:46 【问题描述】:

是否有任何适当的方法可以使用 python 将复杂的依赖项提交到 spark 中?我在网上搜索时发现了以下方法:

def import_pymystem3(x):
    import pymystem3
    return x

int_rdd = spark.sparkContext.parallelize([1,2,3,4])
int_rdd.map(lambda x: import_pymystem3(x))
int_rdd.collect()

但是,由于map() 的使用,这种访问导入的方式很不方便:从map() 内部访问外部库会禁用此导入在其他 RDD 上的使用。

Apache 文档建议 --py-files,我就是这样做的:

创建dependencies.txt,列出我在其中使用的所有依赖项,然后

sudo python36 -m pip install dependencies -r requirements.txt

sudo zip -r ../dependencies/zip .

最后是spark-submit --executor-memory 50g --driver-memory 50g --py-files [path to requirements.zip] [path to project.py]

这就是我看到的:NotADirectoryError: [Errno 20] Not a directory: '/home/.../dependencies/dependencies.zip/sklearn/__check_build'

此外,其他导入也没有加载:ModuleNotFoundError: No module named 'nltk'

是否有任何使用 pyspark 将复杂库提交到 apache spark 集群的工作方法?所有需要的包都安装在工作节点上。

【问题讨论】:

【参考方案1】:

您正在系统(或环境)中安装依赖项。如果要制作 zip,则应指明目标路径。在 pip 命令中,

这是你的改编代码:

# Sudo should not be needed
python36 -m pip install -t ./dependencies -r requirements.txt
zip -r dependencies.zip ./dependencies

【讨论】:

以上是关于将 python 依赖项提交到 spark 集群中的主要内容,如果未能解决你的问题,请参考以下文章

如何将具有依赖项的 python 脚本打包到 zip/tar 中?

包装像 pyspark 的罐子

如何提交依赖于 google dataproc 集群的 pyspark 作业

将 Spark 作业提交到 Spark 集群

Python开发Spark步骤以及如何提交Spark应用,PythonOnSpark原理

无法将 Apache Spark 应用程序提交到容器化集群