Spark 从 MongoDB 读取并按 objectId 索引字段过滤
Spark read from MongoDB and filter by objectId indexed field
我正在尝试使用 mongo-spark-connector 2.2.0 和 _id 字段上的过滤器从 MongoDB 读取数据集。
例如:
MongoSpark.loadAndInferSchema(session,ReadConfig.create(session)).filter(col("_id").getItem("oid").equalTo("590755cd7b868345d6da1f40"));
此查询在大集合上需要很长时间。看起来这个查询没有使用我在集合上的默认 _id 索引,因为过滤器使用字符串而不是 objectId。我怎样才能让它使用索引?
Mongo 默认情况下,连接器应将谓词推送到 mongo,以便我们可以使用 _id 字段,但如果这不起作用,我们可以使用管道 api 来实现相同,见下面的例子
val rdd = MongoSpark.load(sc)
val filterRdd = rdd.withPipeline(Seq(Document.parse(" { $match : { _id : "SomeValue" } }")))
我正在尝试使用 mongo-spark-connector 2.2.0 和 _id 字段上的过滤器从 MongoDB 读取数据集。
例如:
MongoSpark.loadAndInferSchema(session,ReadConfig.create(session)).filter(col("_id").getItem("oid").equalTo("590755cd7b868345d6da1f40"));
此查询在大集合上需要很长时间。看起来这个查询没有使用我在集合上的默认 _id 索引,因为过滤器使用字符串而不是 objectId。我怎样才能让它使用索引?
Mongo 默认情况下,连接器应将谓词推送到 mongo,以便我们可以使用 _id 字段,但如果这不起作用,我们可以使用管道 api 来实现相同,见下面的例子
val rdd = MongoSpark.load(sc)
val filterRdd = rdd.withPipeline(Seq(Document.parse(" { $match : { _id : "SomeValue" } }")))