我有4个python脚本和一个.txt配置文件。在4个python文件中,有一个文件具有spark应用程序的入口点,还可以从其他python文件导入函数。但配置文件是在其他一些python文件中导入的,这些文件不是spark应用程序的入口点。我想在pyspark中编写spark submit命令,但是当配置文件不是python文件而是文本文件或ini文件时,我不知道如何使用spark submit命令提供多个配置文件。
演示:4个python文件:file1.py、file2.py、file3.py。文件4.py
1配置文件:conf.txt
py:这个文件有spark会话和对所有其他python文件的调用。file3.py:这个python文件正在读取conf.txt。
我想提供所有这些文件与Spark提交,但不确定有关命令。我试过的命令如下:
'Args': ['spark-submit',
'--deploy-mode', 'cluster',
'--master', 'yarn',
'--executor-memory',
conf['emr_step_executor_memory'],
'--executor-cores',
conf['emr_step_executor_cores'],
'--conf',
'spark.yarn.submit.waitAppCompletion=true',
'--conf',
'spark.rpc.message.maxSize=1024',
f'{s3_path}/file1.py',
'--py-files',
f'{s3_path}/file2.py',
f'{s3_path}/file3.py',
f'{s3_path}/file4.py',
'--files',
f'{s3_path}/config.txt'
]
但是上面的命令抛出了一个错误:文件“file1.py”,第3行,在from file2*modulenotfounderror:没有名为“file2”的模块
1条答案
按热度按时间7vux5j2d1#
选项1将具有逗号分隔语法的py文件放在实际文件之前
你的情况可能是(
f'{s3_path}/file2.py,{s3_path}/file3.py,{s3_path}/file4.py'
)现在包含文本文件选项2:压缩文件
而且你可以
zip
像这样包括他们例如,首先将它们放在一个目录中
myfiles/
(此外,请清空__init__.py
此目录中根级别的文件,如myfiles/\uuu init\uuuy.py)在这个目录之外,制作一个zip文件(例如
myfiles.zip
)提交时,您可以将此zip添加为
现在把这个拉链
sc.addPyFile
功能考虑到你有
__init__.py
,file2.py
,file3.py
,file4.py
以及config.txt
在myfiles.zip
你现在可以把它们当作更新:你问的
在选项2中:我是否需要使用spark submit或sc.addpyfile()或两者提供“--py files”、“myfiles.zip”的路径?
是的,您需要提供
myfile.zip
比如,/home/hadoop/myfiles.zip
,这意味着您需要有这个文件主节点,您可以使用bootstrap script
要从s3复制它,或者有一个步骤来复制这些