【问题标题】:Spark read from MongoDB and filter by objectId indexed fieldSpark 从 MongoDB 读取并按 objectId 索引字段过滤
【发布时间】:2017-12-20 07:22:59
【问题描述】:

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

例如:

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢,这个解决方案有效,但我仍在寻找使用数据集的方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-23
    • 1970-01-01
    • 2015-07-23
    • 2018-11-21
    • 2016-12-16
    • 1970-01-01
    • 2021-10-20
    相关资源
    最近更新 更多