如何提高使用Spark向MongoDB写入数据的性能?

如何提高使用Spark向MongoDB写入数据的性能?,mongodb,apache-spark,pyspark,Mongodb,Apache Spark,Pyspark,我使用PythonSpark运行一个繁重的迭代计算任务,并将数据写入MongoDB。在每次迭代中,可能会有0.01~1亿个RDD或数据帧中的数据需要计算(此过程简单且相对快速),以及大约100000个数据需要写入MongoDb。问题是,在每次迭代中,过程似乎都卡在MongoSpark作业中(参见下图)。我不知道这份工作是怎么回事。计算部分似乎已经完成(请参阅作业“PythonRDD.scala上的runJob”)。然而,MongoDB在该作业的大部分时间内都不会接收任何数据。据我估计,直接向Mo

我使用PythonSpark运行一个繁重的迭代计算任务,并将数据写入MongoDB。在每次迭代中,可能会有0.01~1亿个RDD或数据帧中的数据需要计算(此过程简单且相对快速),以及大约100000个数据需要写入MongoDb。问题是,在每次迭代中,过程似乎都卡在MongoSpark作业中(参见下图)。我不知道这份工作是怎么回事。计算部分似乎已经完成(请参阅作业“PythonRDD.scala上的runJob”)。然而,MongoDB在该作业的大部分时间内都不会接收任何数据。据我估计,直接向MongoDB写入100000个数据只需花费很少的时间

您能解释一下这项工作花费的时间最多的是什么,以及如何提高这项工作的绩效吗?

谢谢你的帮助


似乎正在从MongoDB映射分区。如果您只是在保存数据,那么不需要这样做。然而,如果看不到任何代码,就很难诊断出真正的原因。而且看起来每个
foreachPartition
都花费了越来越长的时间。这有逻辑上的原因吗?同样,在没有看到任何代码的情况下,很难理解原因。我也有同样的问题,这是我使用的代码:datasource0.write.format(“com.mongodb.spark.sql.DefaultSource”).option(“uri”、“mongodb://”+DBHost+“/DB.COLLECTION”).mode(“append”).save()有什么我需要改变以加速编写的吗?似乎是从MongoDB映射分区。如果您只是在保存数据,那么不需要这样做。然而,如果看不到任何代码,就很难诊断出真正的原因。而且看起来每个
foreachPartition
都花费了越来越长的时间。这有逻辑上的原因吗?同样,在没有看到任何代码的情况下,很难理解原因。我也遇到了同样的问题,这是我使用的代码:datasource0.write.format(“com.mongodb.spark.sql.DefaultSource”)。option(“uri”,“mongodb://“+DBHost+”/DB.COLLECTION”)。mode(“append”)。save()是否需要更改以加快编写速度?