当我从本地shell脚本提交单个python(pyspark)文件时,我有一个运行良好的EMR环境(myProgram.py
已经复制到S3...):
aws emr add-steps \
--cluster-id $CID \
--steps Type=Spark,\
Name="chessAnalytics",\
ActionOnFailure=CONTINUE,\
Args=[s3://$SRC_BUCKET/myProgram.py,\
--gameset1,\'$GAMESET1_URI\',\
--gameset2,\'$GAMESET2_URI\',\
--output_uri,s3://$OUT_BUCKET/V4_t]
我希望把myProgram.py
中的一些实用程序分解成一个对等文件utils.py
,所有的文档都回到spark-submit
的--py-files
选项,并使用一个zip文件。我使用的是aws emr add-steps
,我尝试将--py-files
添加到add-steps
发布版本中:
aws emr add-steps \
--cluster-id $CID \
--steps Type=Spark,\
Name="chessAnalytics",\
ActionOnFailure=CONTINUE,\
Args=[--py-files,s3://$SRC_BUCKET/myZipFile.zip,\
--gameset1,\'$GAMESET1_URI\',\
--gameset2,\'$GAMESET2_URI\',\
--output_uri,s3://$OUT_BUCKET/V4_t]
但此操作失败,错误为Error: Unrecognized option: --gameset1
使用本地CLI(aws emr add-step
)在AWS EMR上捆绑pyspark exec的多个python文件的适当方法是什么?
1条答案
按热度按时间pobjuy321#
要在一个步骤中传递多个文件,需要使用file://将步骤作为json文件传递。
AWS CLI速记语法使用逗号作为分隔符来分隔一系列参数。因此,当我们尝试传入如下参数时:
"files","s3://betaestimationtest/mapper.py,s3://betaestimationtest/reducer.py"
,则速记语法分析器将把mapper.py和reducer.py文件视为两个参数。解决方法是使用json格式。请参见下面的示例。
json看起来像这样:
您还可以在此处找到示例:https://github.com/aws/aws-cli/blob/develop/awscli/examples/emr/create-cluster-examples.rst