提交python依赖项到Spark集群

时间:2019-02-07 12:23:47

标签: python apache-spark pyspark

是否有使用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 个答案:

答案 0 :(得分:0)

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

这是您的编码改编版:

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