将Python依赖项提交到Spark集群

7

有没有适当的方法可以使用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()中访问外部库会禁用其他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集群中?所有需要的包都已安装在worker节点上。

1个回答

1
您正在安装系统(或环境)中的依赖项。如果您想制作zip文件,应指定目标路径。在pip命令中,这是您编写的适配代码:
# Sudo should not be needed
python36 -m pip install -t ./dependencies -r requirements.txt
zip -r dependencies.zip ./dependencies

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接