我正在使用PySpark进行一些大规模处理并将一些结果保存到MongoDB实例中。我正在使用mongo-spark-connector_2.11-2.0.0.jar
将数据帧写入MongoDB。
df.write.format("com.mongodb.spark.sql.DefaultSource").option("spark.mongodb.output.uri", "mongodb://username:pwd@mongoinstance:10203/mydb.mycollection").mode("overwrite").save()
有时我会遇到ConnectionException
,MongoCommandException
等异常。所以我想处理这些例外。所以我添加了这些异常处理代码段,但我得到了ImportError: No module named com.mongodb
。
try:
df.write.format("com.mongodb.spark.sql.DefaultSource").option("spark.mongodb.output.uri", "mongodb://username:pwd@mongoinstance:10203/mydb.mycollection").mode("overwrite").save()
except MongoCommandException:
err_code = MongoCommandException.getErrorCode()
if err_code == int(16):
print "Request size is too large to write to Mongo"
所以你们中的任何人都可以帮助我使用PySpark
mongo-spark-connector_2.11-2.0.0.jar
中的例外情况
答案 0 :(得分:1)
由于PySpark使用Java jar
的执行堆栈,您正在使用/查看的内容实际上是Java库。
这就是您无法从PySpark中访问com.mongodb
库的原因。
然而,您可以从py4j库
中捕获异常from py4j.protocol import Py4JJavaError
try:
df.write.format("com.mongodb.spark.sql.DefaultSource")
.option("spark.mongodb.output.uri", "mongodb://username:pwd@mongoinstance:10203/mydb.mycollection")
.mode("overwrite").save()
except Py4JJavaError, ex:
print(ex.java_exception.toString())
# analyse error stack and handle as needed.
查看MongoDB Java MongoException class的所有直接子类,以查看要处理的可用异常。