PySpark执行df.show()遇Py4JJavaError,Python Worker崩溃求助
我运行以下代码尝试展示DataFrame:
import os import sys from pyspark.sql import * from pyspark.context import SparkContext from pyspark.sql.session import SparkSession os.environ['PYSPARK_PYTHON']=sys.executable os.environ['PYSPARK_DRIVER_PYTHON']=sys.executable spark=SparkSession.builder\ .appName("Hello Spark")\ .master("local[2]")\ .getOrCreate() def spark_practice(): date_list = [("Ravi",28), ("David",45), ("Mani",27)] df=spark.createDataFrame(date_list).toDF("Name","Age") df.printSchema() df.show() spark_practice()
出现如下错误:
File "C:\Program Files\Hadoop\spark-3.5.1\python\lib\py4j-0.10.9.7-src.zip\py4j\protocol.py", line 326, in get_return_value
py4j.protocol.Py4JJavaError: An error occurred while calling o46.showString.
: org.apache.spark.SparkException: Job aborted due to stage failure: Task 0 in stage 0.0 failed 1 times, most recent failure: Lost task 0.0 in stage 0.0 (TID 0) (Prince-PC executor driver): org.apache.spark.SparkException: Python worker exited unexpectedly (crashed)
我已尝试将环境变量PYSPARK_DRIVER_PYTHON设置为项目使用的最新Python版本,但问题仍未解决,特此求助。
可行解决方法
1. 确认Python版本兼容性
Spark 3.5.1要求Python版本在3.8-3.11区间内,运行python --version检查当前版本,若超出范围,切换到兼容版本。
2. 显式指定Python解释器完整路径
避免依赖sys.executable,直接写死Python路径(注意用正斜杠或双反斜杠):
os.environ['PYSPARK_PYTHON'] = 'C:/your/python/path/python.exe' os.environ['PYSPARK_DRIVER_PYTHON'] = 'C:/your/python/path/python.exe'
3. 排查依赖冲突
- 检查是否安装了与Spark冲突的库,比如老旧版本的
pyarrow,Spark 3.5.1推荐使用pyarrow 12.0.0及以上版本。 - 创建干净的虚拟环境,仅安装
pyspark和必要依赖后重新测试。
4. 开启worker日志排查崩溃细节
在代码开头添加日志配置,获取更详细的错误信息:
os.environ['PYSPARK_LOG_LEVEL'] = 'DEBUG' os.environ['PYSPARK_WORKER_LOG_LEVEL'] = 'DEBUG'
运行后查看Spark安装目录下logs文件夹中的worker日志,定位崩溃具体原因。
5. 调整local模式核数
将master("local[2]")改为master("local[1]"),避免多线程资源冲突:
spark=SparkSession.builder\ .appName("Hello Spark")\ .master("local[1]")\ .getOrCreate()
内容的提问来源于stack exchange,提问作者Mani Deepak

