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

如何通过Spark REST API提交带--py-files等效配置的PySpark应用

解决Spark REST API提交PySpark应用时依赖egg包的问题

问题背景

通过spark-submit命令可正常提交PySpark应用,命令如下:

spark-submit --master "spark://192.168.93.42:7077" --name "TopologyDiscovery" --conf spark.eventLog.enabled=true  --py-files /opt/bitnami/spark/application/pyoneer-0.0.1-py3.11.egg /opt/bitnami/spark/application/app.main.py --start 2018-09-21 --end 2018-09-22 --trafoids SIM01

但通过Spark REST API提交时,找不到对应--py-files的配置项,导致出现ModuleNotFoundError: No module named 'app'错误,此前尝试配置appResource、spark.jars等字段均无效。

标准解决方案

Spark REST API中,对应命令行--py-files参数的配置项是**spark.submit.pyFiles**,需将其添加到sparkProperties中,同时调整appResource指向驱动脚本而非依赖egg包。

修改后的提交请求JSON

{
    "appResource": "/opt/bitnami/spark/application/app.main.py",
    "sparkProperties": {
        "spark.master": "spark://192.168.93.42:7077",
        "spark.eventLog.enabled": "true",
        "spark.app.name": "TopologyDiscovery",
        "spark.driver.supervise": "false",
        "spark.submit.deployMode": "client",
        "spark.submit.pyFiles": "/opt/bitnami/spark/application/pyoneer-0.0.1-py3.11.egg"
    },
    "clientSparkVersion": "3.2.1",
    "mainClass": "org.apache.spark.deploy.SparkSubmit",
    "environmentVariables": {
        "SPARK_ENV_LOADED": "1"
    },
    "action": "CreateSubmissionRequest",
    "appArgs": ["--start", "2018-09-21", "--end", "2018-09-22", "--trafoids", "SIM01"]
}

关键调整说明

  • appResource:指定PySpark应用的驱动入口文件(即app.main.py),而非依赖的egg包,与命令行中最后指定的脚本路径对应。
  • spark.submit.pyFiles:对应命令行的--py-files参数,用于指定Python依赖文件(egg、zip、py等),Spark会自动将这些资源分发到集群节点并添加到Python路径中。
  • appArgs:仅保留应用自身的参数(--start、--end等),无需再包含驱动脚本路径,因为appResource已明确指定。
  • 移除spark.jars配置:该参数用于指定Java/Scala的JAR依赖,不适用于Python的egg包。

内容的提问来源于stack exchange,提问作者Santiago Miguel Aranda Rojas

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 12:30:22