提交Dataproc PySpark作业时遇未知参数错误求助
Dataproc PySpark作业参数传递失败排查
问题描述
我通过PowerShell执行以下命令提交PySpark作业到Dataproc集群:
gcloud dataproc jobs submit pyspark gs://path-to-file/myfile.py ` --region europe-west2 ` --cluster my-dataproc-cluster ` -- 20230101 gs://path-to-put-output
其中20230101和gs://path-to-put-output是传递给脚本的日期参数和目标存储桶参数,但作业立即失败,报错如下:
ERROR: (gcloud.dataproc.jobs.submit.pyspark) unrecognized arguments: 20230101 gs://path-to-put-output To search the help text of gcloud commands, run: gcloud help -- SEARCH_TERMS
我试过在参数前加额外短横线、给脚本参数加名称等方式,都没解决问题。脚本本身的参数处理逻辑是正常的,入口代码如下:
if __name__ == "__main__": DATE = sys.argv[1] PATH = sys.argv[2] MyClass(DATE, PATH).compute()
问题原因
问题出在PowerShell对--的特殊解析逻辑上。在PowerShell中,--是内置的参数分隔符,作用是告诉PowerShell停止解析后续参数并直接原样传递,但这里PowerShell会提前拦截这个--,导致gcloud命令根本接收不到这个分隔符,自然无法识别后面属于PySpark脚本的参数,把它们当成了gcloud自身的未知参数。
解决办法
有两种方式可以让PowerShell把--原封不动传递给gcloud:
方式1:用引号包裹--
gcloud dataproc jobs submit pyspark gs://path-to-file/myfile.py ` --region europe-west2 ` --cluster my-dataproc-cluster ` "--" 20230101 gs://path-to-put-output
方式2:用反引号转义--
gcloud dataproc jobs submit pyspark gs://path-to-file/myfile.py ` --region europe-west2 ` --cluster my-dataproc-cluster ` `-- 20230101 gs://path-to-put-output
这样处理后,gcloud就能正确接收到--分隔符,从而区分自身配置参数和需要传递给PySpark脚本的参数,作业就能正常执行了。
内容的提问来源于stack exchange,提问作者Cam
相关产品推荐
相关产品推荐

