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

Windows10下PySpark调用distinct触发Py4JJavaError的解决求助

问题解决:Windows10下Spark RDD distinct方法触发Py4JJavaError

问题重现

在Windows10的Jupyter Notebook中,Spark Session可正常创建,普通RDD的collect()操作能执行,但调用distinct()时抛出Py4JJavaError,已尝试配置org.apache.spark.serializer.KryoSerializer但无效。

示例代码:

from pyspark.sql import SparkSession

spark = SparkSession.builder \
    .appName("DistinctTest") \
    .config("spark.serializer", "org.apache.spark.serializer.KryoSerializer") \
    .master("local[*]") \
    .getOrCreate()

sc = spark.sparkContext
rdd = sc.parallelize([1,2,2,3,3,3])
rdd.distinct().collect()  # 此处触发Py4JJavaError

典型报错堆栈片段:

Py4JJavaError: An error occurred while calling z:org.apache.spark.api.python.PythonRDD.collectAndServe.
: 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, localhost, executor driver): java.io.IOException: Cannot run program "python": CreateProcess error=2, 系统找不到指定的文件。

核心原因

Windows环境下,Spark执行distinct()这类需要启动子任务的操作时,无法正确找到Python解释器路径:

  • 默认Spark会调用python命令,但Windows系统中Python可执行文件可能是python.exe/python3.exe,且未在环境变量中正确映射
  • Jupyter Notebook的Python内核与Spark配置的Python环境不匹配

解决方案

  1. 显式指定Spark的Python解释器路径
    在构建SparkSession时,添加spark.pyspark.python配置项,指向你的Python可执行文件的绝对路径:
spark = SparkSession.builder \
    .appName("DistinctTest") \
    .config("spark.serializer", "org.apache.spark.serializer.KryoSerializer") \
    .config("spark.pyspark.python", "C:/Users/YourName/AppData/Local/Programs/Python/Python39/python.exe")  # 替换为实际路径
    .master("local[*]") \
    .getOrCreate()
  1. 检查并修复系统环境变量
  • 将Python安装目录(比如C:/Users/YourName/AppData/Local/Programs/Python/Python39)添加到系统PATH环境变量
  • 在命令行中执行python --version,确认能正常返回版本信息,确保python命令可被系统识别
  1. 验证环境一致性
  • 如果使用Anaconda/Miniconda环境,先激活目标环境,再启动Jupyter Notebook,确保Jupyter内核与Spark使用的Python环境一致
  • 检查Spark版本与Python版本的兼容性:Spark 3.x要求Python 3.6及以上版本
  1. 简化模式测试
    暂时将master("local[*]")改为master("local")(单线程模式),测试distinct()是否能正常执行,排除多线程环境下的路径冲突问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 18:01:19