PySpark写入MongoDB报错:StringType无匹配BsonValue
解决PySpark写入MongoDB时的StringType转BsonValue错误
错误原因
报错的核心问题是:你要写入的ArrayType(StringType())列中包含超长数字字符串"457133333333672364913",当启用convertJson="any"选项时,MongoDB Spark连接器会自动尝试将字符串推断转换为对应Bson类型,但这个数字超出了Bson Int64的最大值(9223372036854775807),导致类型转换失败,抛出StringType has no matching BsonValue错误。
解决方案
方案1:关闭自动类型推断,强制保留字符串类型
修改写入配置,将convertJson设为"none",让连接器直接以原StringType写入,不做自动类型转换:
(df .write .format("mongodb") .mode("append") .option("convertJson", "none") .option("database", "test") .option("collection", "mongo_collection") .save())
方案2:单独处理问题列,明确字符串类型
如果需要保留其他字段的自动类型转换,可以对报错的数组列做显式处理,确保其中元素以字符串形式存储:
from pyspark.sql.functions import transform, col # 替换成你实际的报错列名 df_processed = df.withColumn("your_error_column", transform(col("your_error_column"), lambda elem: elem.cast("string"))) # 执行写入 (df_processed .write .format("mongodb") .mode("append") .option("convertJson", "any") .option("database", "test") .option("collection", "mongo_collection") .save())
方案3:确认连接器版本兼容性
确保你使用的MongoDB Spark Connector版本与PySpark 3.4.0兼容,推荐使用适配Spark 3.3+的连接器版本(如mongodb-spark-connector_2.12:10.2.0),版本不匹配可能会引发异常的类型转换逻辑问题。
内容的提问来源于stack exchange,提问作者ale
相关产品推荐
相关产品推荐

