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

Spark连接MongoDB加载数据遇ClassNotFoundException报错求助

解决Spark连接MongoDB时的ClassNotFoundException问题

问题根源

你遇到的java.lang.ClassNotFoundException是因为缺少MongoDB Spark Connector的Java依赖包。仅通过pip install pyspark pymongo只能安装Python端的依赖,而Spark连接MongoDB需要专门的Java连接器(mongo-spark-connector),它负责实现com.mongodb.spark.sql.DefaultSource这个数据源类。

解决方案

1. 启动SparkSession时自动加载连接器依赖(推荐)

在构建SparkSession时,通过spark.jars.packages参数指定连接器的Maven坐标,Spark会自动下载并加载对应的JAR包。需要根据你的Spark版本、Scala版本选择匹配的连接器版本:

  • Spark 3.x 通常搭配Scala 2.12,对应连接器版本如org.mongodb.spark:mongo-spark-connector_2.12:10.3.1(适配MongoDB 5.0+)
  • 确保版本兼容:连接器版本需要和你的Spark、MongoDB版本匹配(比如Spark 3.4用Connector 10.3.x,Spark 3.3用10.2.x)

2. 修正后的完整代码

from pyspark.sql import SparkSession
from pyspark.sql.functions import col

# 构建SparkSession,添加MongoDB连接器依赖
spark = SparkSession.builder \
    .appName("MongoDB Spark Connector Example") \
    .config("spark.jars.packages", "org.mongodb.spark:mongo-spark-connector_2.12:10.3.1") \
    .config("spark.mongodb.input.uri", "mongodb://<HOST>:<PORT>/<DB>.<COLLECTION>") \
    # 如果MongoDB需要认证,添加以下配置
    # .config("spark.mongodb.input.auth.username", "<USERNAME>") \
    # .config("spark.mongodb.input.auth.password", "<PASSWORD>") \
    .getOrCreate()

season_year = "1996"
team_abbreviation = "CHH"

# 加载MongoDB数据
df = spark.read.format("mongodb").load() 
# 旧版本连接器可使用:format("com.mongodb.spark.sql.DefaultSource"),新版本推荐直接用"mongodb"

# 筛选数据
filtered_df = df.filter((col("season") == season_year) & (col("TEAM_ABBREVIATION") == team_abbreviation))

# 选择指定字段
selected_columns = ["AGE", "W", "L", "DD2", "TD3", "PLUS_MINUS"]
selected_df = filtered_df.select(*selected_columns)

selected_df.show()

3. 注意事项

  • 替换代码中的<HOST>、<PORT>、<DB>、<COLLECTION>为你的MongoDB实际信息
  • 如果使用MongoDB云服务(如Atlas),URI格式应为mongodb+srv://<USERNAME>:<PASSWORD>@<CLUSTER_URL>/<DB>.<COLLECTION>
  • 若连接器版本不匹配,可能会出现其他兼容性错误,需根据你的环境选择对应版本

内容的提问来源于stack exchange,提问作者Altin Mag.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 10:48:29