在AWS Cloud9初始化PySpark 3.3.1并读取S3文件时遇报错求助
在AWS Cloud9中初始化PySpark 3.3.1并读取S3文件的问题
问题说明
我在AWS Cloud9环境中初始化PySpark 3.3.1版本,尝试读取AWS S3上的文件时出现错误,推测是PySpark初始化配置存在问题。目前我的PySpark版本为3.3.1,Hadoop版本为3,试过同事提供的启动代码但无效。
当前使用的启动代码
pkg_list=org.apache.spark:spark-avro_2.11:2.4.4,org.apache.hadoop:hadoop-aws:2.7.1 pyspark --packages $pkg_list --driver-memory 32G --driver-cores 8 --num-executors 8 --executor-memory 32G --executor-cores 8 --driver-java-options="-Djava.io.tmpdir=/home/yoongkiat/tempfiles"
问题分析与解决办法
- 依赖版本不匹配:你当前指定的依赖包版本和PySpark 3.3.1、Hadoop 3完全不兼容,这是核心问题:
- PySpark 3.3.1对应的Scala版本是2.12,而非2.11,因此
spark-avro需要使用适配Scala 2.12且版本匹配PySpark的包,比如org.apache.spark:spark-avro_2.12:3.3.1 - Hadoop版本为3,所以
hadoop-aws需要选用3.x系列的兼容版本,比如org.apache.hadoop:hadoop-aws:3.3.4
- PySpark 3.3.1对应的Scala版本是2.12,而非2.11,因此
- 修正后的启动命令:
pkg_list=org.apache.spark:spark-avro_2.12:3.3.1,org.apache.hadoop:hadoop-aws:3.3.4 pyspark --packages $pkg_list --driver-memory 32G --driver-cores 8 --num-executors 8 --executor-memory 32G --executor-cores 8 --driver-java-options="-Djava.io.tmpdir=/home/yoongkiat/tempfiles"
- S3读取额外配置:启动PySpark后,若Cloud9实例已绑定有权限访问目标S3桶的IAM角色,无需手动配置密钥;若未绑定,则需在代码中添加认证配置:
from pyspark.sql import SparkSession spark = SparkSession.builder.appName("S3FileReader").getOrCreate() # 未绑定IAM角色时添加以下配置(替换为你的密钥) # spark._jsc.hadoopConfiguration().set("fs.s3a.access.key", "你的AWS_ACCESS_KEY_ID") # spark._jsc.hadoopConfiguration().set("fs.s3a.secret.key", "你的AWS_SECRET_ACCESS_KEY") # 读取S3文件示例 df = spark.read.csv("s3a://你的存储桶名称/文件路径.csv") df.show()
内容的提问来源于stack exchange,提问作者hello
相关产品推荐
相关产品推荐

