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

问题描述 投票:0回答:1

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

例如:

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

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

mongodb apache-spark apache-spark-dataset
1个回答
0
投票

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

val rdd = MongoSpark.load(sc)

val filterRdd = rdd.withPipeline(Seq(Document.parse(" { $match : { _id : "SomeValue" } }")))
© www.soinside.com 2019 - 2024. All rights reserved.