使用Mongo Spark连接器时如何从Spark中的Mongo分离?

时间:2018-08-21 22:53:03

标签: mongodb scala apache-spark

说我运行以下代码:

 var mongoData = MongoSpark.load(sc, contextReadConfig)
 val mongoDF = mongoData.toDF
 //... do some selections, aggregations, etc that all get run on Mongo...
 mongoData.createOrReplaceTempView("myNewView")

我在myNewView上做了很多处理,试图在一个循环中尝试不同的计算。当它启动时,我可以看到我的mongod进程在CPU利用率上猛增。我该如何做,以便在处理数据时不再将其一直追溯到Mongo?我需要对数据进行大量计算,并且不想锤击我的Mongo实例。

编辑:通过在数据帧上调用.cache(),似乎可以解决此问题。是否可以保证与Mongo脱离联系?

1 个答案:

答案 0 :(得分:2)

cache()会将数据帧存储到内存中,如果创建了任何新数据帧,则有可能从内存中清除旧数据。

当您尝试使用第一个数据框时,它将再次在数据库上查询。

您可以使用cache()而不是persist(),并指定同时使用内存和光盘,这样,一旦内存溢出,数据就会写入光盘。

import org.apache.spark.storage.StorageLevel

mongoDF.persist(StorageLevel.MEMORY_AND_DISK)