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

如何将spark-submit命令中的脚本路径传入Python脚本用于文件写入?

解决Spark Submit脚本路径获取与文件写入位置一致的问题

核心实现方案

要实现从不同目录层级运行脚本时文件写入位置一致,关键是准确获取spark-submit命令中传入的脚本路径,再基于该路径的目录部分构建写入路径:

  1. 获取提交时的脚本路径
    spark-submit执行时,脚本路径是命令的最后一个参数,直接通过Python的sys.argv即可获取:

    import sys
    import os
    
    # 提取spark-submit命令中传入的脚本路径
    submit_script_path = sys.argv[-1]
    # 解析出脚本所在的目录
    script_dir = os.path.dirname(submit_script_path)
    
  2. 构建固定相对写入路径
    基于上述目录拼接写入文件的路径,这样无论你用绝对路径还是相对路径提交脚本,写入文件都会和提交时指定的脚本路径处于同一层级:

    # 示例:在脚本所在目录下写入output.txt
    write_path = os.path.join(script_dir, "output.txt")
    
    # 执行写入操作
    with open(write_path, "w") as f:
        f.write("测试内容")
    

替代方案

如果依赖脚本路径的方式不够灵活,还可以选择以下方案:

  • 显式传递写入路径参数
    直接在spark-submit命令中把目标写入路径作为脚本参数传入,这种方式更直观可控:

    # 命令行传入写入路径
    spark-submit --master local[*] spark.py /home/new/user/target_output_dir
    

    脚本中读取参数:

    write_dir = sys.argv[1]
    write_path = os.path.join(write_dir, "output.txt")
    
  • 通过Spark配置传递路径
    利用Spark的配置参数传递写入路径,适合需要和Spark集群配置联动的场景:

    # 通过--conf传递写入目录
    spark-submit --conf spark.app.write.dir=/home/new/user/target_output_dir --master local[*] spark.py
    

    脚本中从Spark配置读取:

    from pyspark.sql import SparkSession
    
    spark = SparkSession.builder.getOrCreate()
    write_dir = spark.sparkContext.getConf().get("spark.app.write.dir")
    write_path = os.path.join(write_dir, "output.txt")
    
  • 使用脚本真实物理路径(参考方案)
    如果你需要固定到脚本实际所在的物理目录(而非提交时的层级路径),可以用os.path.abspath(__file__)获取脚本的绝对路径,但这不符合你要求的“执行时层级路径”场景,仅作参考:

    script_real_dir = os.path.dirname(os.path.abspath(__file__))
    write_path = os.path.join(script_real_dir, "output.txt")
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 08:05:26