pyspark提交命令

qxgroojn  于 2021-05-26  发布在  Spark
关注(0)|答案(1)|浏览(504)

我有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”的模块

7vux5j2d

7vux5j2d1#

选项1将具有逗号分隔语法的py文件放在实际文件之前

'Args': ['spark-submit',
                '--py-files',
                'file2.py,file3.py,file4.py',
                'file1.py',
                '--files',
                 f'{s3_path}/config.txt]
        }

你的情况可能是( f'{s3_path}/file2.py,{s3_path}/file3.py,{s3_path}/file4.py' )现在包含文本文件

sc.textFile("config.txt")

选项2:压缩文件
而且你可以 zip 像这样包括他们
例如,首先将它们放在一个目录中 myfiles/ (此外,请清空 __init__.py 此目录中根级别的文件,如myfiles/\uuu init\uuuy.py)
在这个目录之外,制作一个zip文件(例如 myfiles.zip )
提交时,您可以将此zip添加为

'Args': ['spark-submit',
                '--py-files',
                'myfiles.zip',
                'file1.py'
        }

现在把这个拉链 sc.addPyFile 功能

sc.addPyFile("myfiles.zip")

考虑到你有 __init__.py , file2.py , file3.py , file4.py 以及 config.txtmyfiles.zip 你现在可以把它们当作

from myfiles.File1 import *
from myfiles.File2 import *

更新:你问的
在选项2中:我是否需要使用spark submit或sc.addpyfile()或两者提供“--py files”、“myfiles.zip”的路径?
是的,您需要提供 myfile.zip 比如, /home/hadoop/myfiles.zip ,这意味着您需要有这个文件主节点,您可以使用 bootstrap script 要从s3复制它,
或者有一个步骤来复制这些

{
        'Name': 'setup - copy files4',
        'ActionOnFailure': 'TERMINATE_CLUSTER',
        'HadoopJarStep': {
            'Jar': 'command-runner.jar',
            'Args': ['aws', 's3', 'cp',
                YOUR_S3_URI + 'myfiles.zip',
                '/home/hadoop/']
        }
    }

相关问题