首页 > 解决方案 > 如何使用多个 python 文件提交 pyspark 作业?

问题描述

我正在弄清楚如何提交使用 pycharm ide 开发的 pyspark 作业。有 4 个 python 文件,1 个 python 文件是与 pyspark 作业一起提交的主 python 文件,但其余 3 个文件导入到主 python 文件中,但我无法理解我的 python 文件是否都在 s3 bukcet 中可用,如何spark 作业将能够引用那些未使用 pyspark submit 命令提交的作业。例如:文件 1、文件 2、文件 3、文件 4

spark-submit --master local  --driver-memory 2g --executor-memory  2g   s3_path\file1.py

file2 , file3 , file4 被导入到 file1 但我想知道 spark 如何引用其他 python 文件。

标签: pythonapache-sparkpyspark

解决方案


创建一个包(egg文件)

使用setuptools 将您的文件夹创建到可导入包中。假设您在文件夹下有多个文件mypackage,如下所示:

mypackage
|-- file1.py
|-- file2.py
|-- ...
`-- __init__.py

使用setuptools您可以创建一个 egg 文件(这是一种压缩版本的包)

egg将文件传递给spark-submit

spark-submit --pyfiles mypackage.egg <rest of the args>

在 Spark 应用程序中导入包的内容


from mypackage.file1 import somefunction
somefunction()

这里更重要的一件事是,如果您有权访问/能够 pip install 东西,而不是使用eggcreate a wheelfile and run pip install s3_path/<wheel-file>,它将安装包并将您的可运行脚本复制到/usr/local/bin/或等效路径立即使您的生活更轻松。


推荐阅读