You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Apache Spark隐藏REST API提交Python脚本?

如何通过Apache Spark的REST API提交Python脚本?

我尝试按照arturmkrtchyan的教程,通过Apache Spark的REST API提交Python脚本,但教程里没有任何关于提交py文件的示例或文档。请问是否可以将请求中的jar文件替换为py文件(我当前的curl请求如下),或是有其他实现方式?

我的示例curl请求:

curl -X POST http://spark-cluster-ip:6066/v1/submissions/create --header "Content-Type:application/json;charset=UTF-8" --data '{ "action" : "CreateSubmissionRequest", "appArgs" : [ "myAppArgument1" ], "appResource" : "file:/path/to/py/file/file.py", "clientSparkVersion" : "1.5.0", "environmentVariables" : { "SPARK_ENV_LOADED" : "1" }, "mainClass" : "com.mycompany.MyJob", "sparkProperties" : { "spark.submit.pyFiles": "/path/to/py/file/file.py", "spark.driver.supervise" : "false", "spark.app.name" : "MyJob", "spark.eventLog.enabled": "true", "spark.submit.deployMode" : "cluster", "spark.master" : "spark://spark-cluster-ip:6066" } }'

当然可以通过Spark REST API提交Python脚本,不过你需要调整请求里的几个关键参数,我给你详细说明:

首先,你当前的请求里有几个不适合Python脚本的参数,得修改:

  1. 移除mainClass参数:这个参数是给Scala/Java应用指定主类用的,Python脚本完全不需要它——留着这个参数会导致Spark找不到对应的Java类,直接触发报错,所以一定要删掉。

  2. 修正spark.submit.pyFiles参数(可选):这个参数的作用是上传Python脚本依赖的第三方包(比如.zip或.egg格式的包),不是用来指定你的主脚本的。如果你的Python脚本没有额外依赖,这个参数可以直接删掉;如果有依赖,这里填依赖包的路径即可。

  3. 确认appResource路径的可访问性:这个参数就是用来指定你的主Python脚本的路径,要确保Spark集群的所有节点都能访问到这个路径:

    • 如果用file://开头的本地路径,必须保证集群每个节点的本地文件系统里都有这个脚本;
    • 更稳妥的方式是用HDFS或者共享存储的路径(比如hdfs:///path/to/your/script.py),这样所有节点都能轻松读取到。
  4. 可选:添加spark.files属性(如果用本地文件):如果你的脚本在本地,不想手动在每个节点拷贝一份,可以在sparkProperties里添加"spark.files": "/path/to/py/file/file.py",Spark会自动把这个文件分发到集群的所有节点上。

调整后的完整curl请求示例:

curl -X POST http://spark-cluster-ip:6066/v1/submissions/create \
--header "Content-Type:application/json;charset=UTF-8" \
--data '{ 
    "action" : "CreateSubmissionRequest", 
    "appArgs" : [ "myAppArgument1" ], 
    "appResource" : "file:/path/to/py/file/file.py", 
    "clientSparkVersion" : "1.5.0", 
    "environmentVariables" : { "SPARK_ENV_LOADED" : "1" }, 
    "sparkProperties" : { 
        "spark.driver.supervise" : "false", 
        "spark.app.name" : "MyPythonJob", 
        "spark.eventLog.enabled": "true", 
        "spark.submit.deployMode" : "cluster", 
        "spark.master" : "spark://spark-cluster-ip:6066",
        "spark.files": "/path/to/py/file/file.py"  # 可选,用于分发本地脚本
    } 
}'

额外注意事项:

  • 版本兼容性:clientSparkVersion必须和你集群的Spark版本完全一致,否则可能出现提交失败的情况。
  • 任务状态查询:提交成功后,你会得到一个submissionId,可以通过curl http://spark-cluster-ip:6066/v1/submissions/status/{submissionId}来查询任务的运行状态。
  • 依赖处理:如果你的Python脚本需要依赖其他本地模块,除了用spark.submit.pyFiles打包成zip包,也可以把依赖模块和主脚本一起放到共享存储路径下,确保节点能读取到。

内容的提问来源于stack exchange,提问作者Mahsa Pourjafarian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:29:52