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

PySpark读取GCS JSON文件时ClassNotFoundException问题求助

解决PySpark读取GCS文件时的ClassNotFoundException问题

问题根源

出现ClassNotFoundException: com.google.cloud.hadoop.fs.gcs.GoogleHadoopFileSystem的核心原因是:你的Spark集群缺少GCS Hadoop文件系统的依赖包,无法识别gs://协议对应的实现类。

解决方案

方式一:spark-submit时动态加载依赖(推荐,适合在线环境)

直接在spark-submit命令中通过--packages参数指定GCS连接器的依赖包,Spark会自动下载并加载该依赖。注意要选择与你的Hadoop版本(Hadoop3)匹配的连接器版本,比如hadoop3-2.2.10(适配Spark3.3.2+Hadoop3组合):

spark-submit --master spark://MacBook-User.local:7077 --packages com.google.cloud.bigdataoss:gcs-connector:hadoop3-2.2.10 test2.py

方式二:手动添加依赖包到Spark(适合离线环境)

如果你的集群无法访问Maven仓库,可手动下载依赖包并部署:

  • 下载适配Hadoop3的GCS连接器JAR包(选择与Spark 3.3.2兼容的版本,比如hadoop3-2.2.10)
  • 将下载的JAR包复制到Spark安装目录的jars文件夹下,比如:
cp /path/to/gcs-connector-hadoop3-2.2.10.jar /your/spark/path/spark-3.3.2-bin-hadoop3/jars/
  • 重启Spark集群:先执行./stop-slave.sh和./stop-master.sh停止服务,再重新启动./start-master.sh和./start-slave.sh spark://MacBook-User.local:7077
  • 重新执行spark-submit命令

验证你的test2.py配置

确保脚本中已正确配置GCS文件系统参数,示例代码片段:

from pyspark.sql import SparkSession

spark = SparkSession.builder \
    .appName("ReadGCSJSON") \
    .getOrCreate()

# 配置GCS文件系统核心参数
spark.conf.set("fs.gs.impl", "com.google.cloud.hadoop.fs.gcs.GoogleHadoopFileSystem")
spark.conf.set("fs.AbstractFileSystem.gs.impl", "com.google.cloud.hadoop.fs.gcs.GoogleHadoopFS")
# 如果GCS桶需要认证,添加服务账号密钥配置(可选)
# spark.conf.set("google.cloud.auth.service.account.json.keyfile", "/path/to/your-service-account-key.json")

# 读取GCS中的JSON文件
df = spark.read.json("gs://testpysparkscript/test.json")
df.show()

spark.stop()

注意事项

  • 版本匹配至关重要:必须选择与你的Hadoop版本(Hadoop3)对应的GCS连接器版本,避免使用hadoop2后缀的包,否则会出现兼容性问题
  • 集群节点一致性:如果用方式二手动添加JAR包,所有Spark slave节点都需要放置相同的JAR包,否则会出现节点间依赖缺失的问题
  • GCS权限验证:确保运行Spark的账号或配置的服务账号拥有testpysparkscript桶的读取权限,否则会出现权限错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 01:07:18