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