Spark从MongoDB读取并按objectId索引字段过滤

时间:2017-12-20 07:22:59

标签: mongodb apache-spark apache-spark-dataset

我正在尝试使用mongo-spark-connector 2.2.0在_id字段中使用过滤器从MongoDB读取数据集。

例如:

MongoSpark.loadAndInferSchema(session,ReadConfig.create(session)).filter(col("_id").getItem("oid").equalTo("590755cd7b868345d6da1f40"));

此查询在大集合上需要很长时间。看起来这个查询不使用我对集合的默认_id索引,因为过滤器使用字符串而不是objectId。如何让它使用索引?

1 个答案:

答案 0 :(得分:0)

默认情况下,Mongo Connector应该将谓词推送到mongo,以便我们可以使用_id字段,但如果这不起作用,我们可以使用管道api来实现相同的效果,请参见下面的示例

val rdd = MongoSpark.load(sc)

val filterRdd = rdd.withPipeline(Seq(Document.parse(" { $match : { _id : "SomeValue" } }")))