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

使用spark-submit运行Python Spark应用失败,但直接执行脚本正常

问题描述

按照Spark官方文档的「独立应用」示例编写了SimpleApp.py与setup.py文件,执行pip install .完成安装后,直接运行python SimpleApp.py可正常输出统计结果,但使用spark-submit --master local[*] SimpleApp.py执行时,仅输出ShutdownHookManager相关日志,无预期的统计结果,操作完全遵循文档步骤。

相关代码与执行信息

setup.py代码

from setuptools import setup, find_packages

setup(
    name='my-spark-project',
    version='0.1',
    packages=find_packages(),
    install_requires=[
        'pyspark==3.5.1'
        # Add other dependencies here
    ],
)

SimpleApp.py代码

"""SimpleApp.py"""
from pyspark.sql import SparkSession

logFile = "C:\\apache-spark\\README.md"  # 需替换为你系统中存在的文件路径
spark = SparkSession.builder.appName("SimpleApp").getOrCreate()
logData = spark.read.text(logFile).cache()

numAs = logData.filter(logData.value.contains('a')).count()
numBs = logData.filter(logData.value.contains('b')).count()

print("Lines with a: %i, lines with b: %i" % (numAs, numBs))

spark.stop()

执行命令

> pip install .
> spark-submit --master local[*] SimpleApp.py

执行结果

Python24/04/05 14:22:35 INFO ShutdownHookManager: Shutdown hook called
24/04/05 14:22:35 INFO ShutdownHookManager: Deleting directory C:\Users\hendr\AppData\Local\Temp\spark-e91e861f-3f9b-4e18-b064-44bee42a2fb0

解决方案

1. 检查目标文件路径与存在性

spark-submit的工作目录可能和直接执行python时不同,导致代码中指定的logFile无法被找到:

  • 在SimpleApp.py开头添加路径校验代码,明确提示文件状态:
    import os
    logFile = "C:\\apache-spark\\README.md"
    if not os.path.exists(logFile):
        print(f"错误:文件 {logFile} 不存在!")
        exit(1)
    
  • 打印当前工作目录确认路径基准:
    import os
    print(f"当前工作目录:{os.getcwd()}")
    

2. 调整Spark日志级别,暴露调试信息

默认日志级别可能隐藏了文件读取失败等关键错误,可通过以下方式调整:

  • 创建SparkSession时配置日志级别:
    spark = SparkSession.builder \
        .appName("SimpleApp") \
        .config("spark.driver.log.level", "INFO") \
        .getOrCreate()
    
  • 或者在spark-submit命令中直接指定:
    spark-submit --master local[*] --conf spark.driver.log.level=INFO SimpleApp.py
    

3. 解决PySpark环境冲突

通过pip install .安装的PySpark可能与spark-submit自带的PySpark版本冲突:

  • 卸载已安装的PySpark:pip uninstall -y pyspark,直接使用spark-submit自带的环境运行
  • 确保spark-submit对应的Spark版本与代码中指定的pyspark==3.5.1一致

4. 强制Driver端输出到控制台

部分环境下spark-submit会重定向Driver的标准输出,可通过配置强制显示:

spark-submit --master local[*] --conf spark.driver.stdout=console SimpleApp.py

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 12:33:20