使用PySpark将CSV导入MongoDB时遭遇Py4JJavaError错误
解决Spark写入MongoDB时的ClassNotFoundException问题
尝试用PySpark将本地CSV文件导入MongoDB,使用的代码如下:
from pyspark.sql import SparkSession from pyspark.conf import SparkConf conf = SparkConf() \ .setAppName("MongoDB") \ .setMaster("local[*]") \ .set("spark.mongodb.input.uri", "mongodb://localhost:27017/Scrub_Data.RPT_AR") \ .set("spark.mongodb.output.uri", "mongodb://localhost:27017/Scrub_Data.RPT_AR") spark = SparkSession.builder \ .config(conf=conf) \ .getOrCreate() df = spark.read.csv("mypathtocsvfile", header=True, inferSchema=True) df.write \ .format("com.mongodb.spark.sql.DefaultSource") \ .mode("append") \ .option("uri", "mongodb://localhost:27017/Scrub_Data.RPT_AR") \ .save()
运行上述代码时抛出Py4JJavaError,提示调用o39.save时出错,具体为java.lang.ClassNotFoundException:找不到数据源com.mongodb.spark.sql.DefaultSource。
解决方案
- 添加MongoDB Spark Connector依赖
这个错误的核心是Spark缺少MongoDB数据源的驱动包,必须引入对应的连接器依赖:- 若使用
spark-submit运行脚本,在命令中指定依赖包(需匹配你的Spark和Scala版本):
说明:spark-submit --packages org.mongodb.spark:mongo-spark-connector_2.12:10.2.0 your_script.py_2.12是Scala版本号,10.2.0是连接器版本,需根据你的Spark版本调整(比如Spark 3.x对应连接器10.x系列)。 - 若在IDE本地开发,可在SparkSession构建时直接配置依赖:
spark = SparkSession.builder \ .config(conf=conf) \ .config("spark.jars.packages", "org.mongodb.spark:mongo-spark-connector_2.12:10.2.0") \ .getOrCreate()
- 若使用
- 检查版本兼容性
确保MongoDB Spark Connector版本与你的Spark、MongoDB服务器版本兼容:- Spark 3.0+ 适配连接器10.x及以上版本
- Spark 2.4.x 适配连接器2.x系列
内容的提问来源于stack exchange,提问作者RajatK350
相关产品推荐
相关产品推荐

