如何在PySpark中处理MongoDB异常?

时间:2017-06-15 07:19:19

标签: mongodb pyspark spark-dataframe

我正在使用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()

有时我会遇到ConnectionExceptionMongoCommandException等异常。所以我想处理这些例外。所以我添加了这些异常处理代码段,但我得到了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中的例外情况

1 个答案:

答案 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的所有直接子类,以查看要处理的可用异常。