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

Windows下PySpark读取S3报No FileSystem for scheme: s3如何解决

问题解决与版本匹配方法

核心问题原因

你当前的报错是hadoop-aws、aws-java-sdk与Spark内置Hadoop版本不兼容导致的,且缺少必要的S3文件系统配置。

版本匹配规则

针对你现有PySpark 2.4.8环境,版本对应要求如下:

  • PySpark 2.4.8 内置绑定的 Hadoop 版本为 2.7.7,hadoop-aws版本必须与Spark内置Hadoop版本完全一致
  • hadoop-aws 2.7.7 匹配的 aws-java-sdk 版本为 1.7.4

你当前使用的hadoop-aws 2.7.3、aws-java-sdk 1.8.2均不符合匹配要求,是报错的直接原因。

具体修复步骤

  1. 替换依赖jar包
    • 删掉Spark的jars目录中原有hadoop-aws-2.7.3.jar、aws-java-sdk-1.8.2.jar
    • 放入对应版本的hadoop-aws-2.7.7.jar、aws-java-sdk-1.7.4.jar
  2. 新增SparkSession配置
    创建SparkSession时添加S3文件系统与认证配置,示例代码如下:
    import findspark
    findspark.init()
    
    from pyspark.sql import SparkSession
    
    spark = SparkSession.builder.appName("my_app") \
        # 配置s3协议的文件系统实现类
        .config("spark.hadoop.fs.s3.impl", "org.apache.hadoop.fs.s3native.NativeS3FileSystem") \
        # 可选:推荐使用s3a协议,性能和兼容性更好,开启后读取路径前缀改为s3a://
        # .config("spark.hadoop.fs.s3a.impl", "org.apache.hadoop.fs.s3a.S3AFileSystem") \
        # 配置AWS访问密钥,也可提前配置在系统环境变量中
        .config("spark.hadoop.fs.s3.awsAccessKeyId", "你的AWS访问密钥ID") \
        .config("spark.hadoop.fs.s3.awsSecretAccessKey", "你的AWS访问密钥") \
        .getOrCreate()
    
  3. 验证读取逻辑
    配置完成后,即可正常读取S3数据:
    # 如开启s3a配置,前缀改为s3a://bucket_name
    input_bucket = "s3://bucket_name"
    data = spark.read.csv(input_bucket + '/file_name', header=True, inferSchema=True)
    

通用版本选择方法

后续遇到同类版本匹配问题,可按以下步骤确认对应版本:

  • 执行以下代码获取当前Spark内置的Hadoop版本,hadoop-jar版本必须与该值完全一致:
    # 启动pyspark后执行
    print(sc._jvm.org.apache.hadoop.util.VersionInfo.getVersion())
    
  • 查找对应hadoop-aws版本依赖的aws-java-sdk版本,保证两个jar包版本严格匹配即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 20:54:07