本地PyCharm运行PySpark作业访问S3时触发Py4JJavaError报错求助
问题解决:Py4JJavaError: spark.sql.execution.pythonUDF.arrow.enabled 不存在
核心原因
你当前使用的PySpark版本(3.5.1)与Spark二进制包版本(3.3.0)不兼容。PySpark 3.5.1会尝试读取spark.sql.execution.pythonUDF.arrow.enabled这个配置项,但Spark 3.3.0的核心Java代码中并没有定义该配置,因此触发NoSuchElementException。
解决方案
1. 对齐PySpark与Spark版本
必须保证两者版本完全一致,二选一操作:
- 降级PySpark到3.3.0:
打开终端执行:pip uninstall pyspark -y pip install pyspark==3.3.0 - 升级Spark二进制包到3.5.1:
下载对应Hadoop版本的Spark 3.5.1包(如spark-3.5.1-bin-hadoop3),替换本地现有3.3.0的Spark包,并更新环境变量SPARK_HOME指向新路径。
2. 验证环境配置
- 确认PyCharm的Python解释器已关联安装了对应版本PySpark的虚拟环境
- 检查系统环境变量
SPARK_HOME是否正确指向解压后的Spark包目录
3. S3读取补充配置(若后续遇访问问题)
如果读取S3数据时仍有问题,需配置AWS访问参数并确保依赖包兼容:
from pyspark.sql import SparkSession spark = SparkSession.builder \ .appName("S3DataReader") \ .config("spark.hadoop.fs.s3a.access.key", "你的AWS访问密钥ID") \ .config("spark.hadoop.fs.s3a.secret.key", "你的AWS秘密访问密钥") \ .config("spark.hadoop.fs.s3a.impl", "org.apache.hadoop.fs.s3a.S3AFileSystem") \ .getOrCreate() # 读取S3数据示例 df = spark.read.csv("s3a://your-bucket-name/path/to/data.csv", header=True)
内容的提问来源于stack exchange,提问作者Shasu
相关产品推荐
相关产品推荐

