如何提交包含多个python文件的pyspark作业?

如何提交包含多个python文件的pyspark作业?,python,apache-spark,pyspark,Python,Apache Spark,Pyspark,我正在研究如何提交使用pycharm ide开发的pyspark作业。有4个python文件,1个python文件是主python文件,它是随pyspark作业提交的,但其余3个文件是在主python文件中导入的,但我无法理解如果我的python文件都在s3 bukset中可用,spark作业将如何引用那些未随pyspark提交命令提交的文件。 例如: 文件1、文件2、文件3、文件4 spark-submit --master local --driver-memory 2g --execut

我正在研究如何提交使用pycharm ide开发的pyspark作业。有4个python文件,1个python文件是主python文件,它是随pyspark作业提交的,但其余3个文件是在主python文件中导入的,但我无法理解如果我的python文件都在s3 bukset中可用,spark作业将如何引用那些未随pyspark提交命令提交的文件。 例如: 文件1、文件2、文件3、文件4

spark-submit --master local  --driver-memory 2g --executor-memory  2g   s3_path\file1.py
file2、file3、file4在file1中导入,但我想知道spark如何引用其他python文件。

创建一个包(
egg
file) 使用 将文件夹创建到可导入的包中。 假设文件夹
mypackage
下有多个文件,如下所示:

mypackage
|--file1.py
|--file2.py
|-- ...
`--_uuuinit_uuuuu.py
使用
setuptools
可以创建一个egg文件(这是一种压缩版本的软件包)

egg
文件传递到
spark submit
spark提交--pyfiles mypackage.egg

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

从mypackage.file1导入somefunction
somefunction()

这里还有一件更重要的事情,如果您有权/能够pip安装东西,那么不要使用
egg
创建
wheel
文件并运行
pip install s3\u path/
,它将安装软件包,并将您的可运行脚本复制到
/usr/local/bin/
或等效路径,使您的生活更轻松。

请使用以下配置

--py-files PY_FILES         Comma-separated list of .zip, .egg, or .py files to place
                            on the PYTHONPATH for Python apps.
因此,您的命令将如下所示

spark-submit --master local  --driver-memory 2g --executor-memory  2g --py-files s3_path\file2.py,s3_path\file3.py,s3_path\file4.py  s3_path\file1.py

一个重要的注意事项是,如果我没有init.py,只有file1、file2、file3,并且我已经装箱了mypackage.egg,但我的sparkcontext是在file1中定义的,这是spark的入口点,那么文件路径之间不要有空格,所以使用spark submit提交egg文件在这种情况下spark如何知道哪一个是spark上下文的入口文件。感谢您回答这个问题,除了python文件之外,我还有一个配置文件,它将被file1.py读取,我如何传递该配置文件呢。配置文件是text/ini文件。您能提供最小的可复制示例吗?首先,我有:您能将text/ini包装在str变量中并插入一个新的.py文件吗?