【问题标题】:What is the work logic of the Mongo-Spark Connector?Mongo-Spark Connector的工作逻辑是什么?
【发布时间】:2017-12-15 15:34:30
【问题描述】:

我一直试图了解 mongo-spark 连接器的工作原理,但我仍然没有了解它背后的整个工作逻辑。

详情: 我正在尝试使用 Mongo-Spark 运行一个 spark 作业,该作业主要针对 MongoDB 集合执行文本搜索。 Spark 和 MongoDB 在两个不同的集群上运行

所以我创建了以下 Spark-mongo 数据框:

entity_df = sqlContext.read.format("com.mongodb.spark.sql.DefaultSource") \
                        .option("spark.mongodb.input.database", "WikiData") \
                        .option("spark.mongodb.input.collection", "entities_slim") \
                        .load()

entity_df.cache()
df = entity_df.filter(entity_df['id'] == "Q2834810").show()

第一条指令是否意味着entities_slim 集合正在从 MongoDB 集群复制到 spark 集群并表示为 Spark DataFrame?

如果是,这是否意味着连接器只是一个工具,只能在 MongoDB 和 Spark 之间读取/写入数据?

如果是,有没有办法通过 MongoDB 引擎创建运行 MongoDB 查询的 spark 作业?类似:

import pymongo
from pyspark import SparkContext

spark_rdd.map(lamda x: entities.find_one( {'id': best} ))

请注意,执行语句 entity_df.filter(entity_df['id'] == "Q2834810").show() 比使用 pymongo 直接查询 MongoDB 运行速度要慢得多

【问题讨论】:

    标签: mongodb apache-spark pyspark


    【解决方案1】:

    如果是,这是否意味着连接器只是一个工具,只能在 MongoDB 和 Spark 之间读取/写入数据?

    在某种程度上,但并不意味着

    entities_slim 集合正在从 MongoDB 集群复制。

    选择(过滤器)are converted to aggregation pipelines:

    当使用带有 DataFrames 或 Spark SQL 的过滤器时,底层的 Mongo 连接器代码会构建一个聚合管道来过滤 MongoDB 中的数据,然后再将其发送到 Spark

    这种行为通常在数据源 API 中很常见 - 如果可能,投影和选择会被推送到源。

    回到你的担忧:

    请注意,执行语句 entity_df.filter(entity_df['id'] == "Q2834810").show() 比使用 pymongo 直接查询 MongoDB 慢得多

    这是意料之中的。 Apache Spark 和 MongoDB 聚合管道都不是为低延迟、单项查询而设计的。两者都适用于大规模的批处理。如果您需要快速的单项访问,请首先不要使用 Apache Spark - 这就是您拥有数据库的目的。

    最后如果运行

    主要针对 MongoDB 集合执行文本搜索的作业。

    内置的 MongoDB 文本搜索功能(尽管它们不完善)可能是更好的选择。

    【讨论】:

    • 感谢@user6910411。我需要使用 spark 来执行需要执行许多 MongoDB 查询的作业。因此,除了查询结果之外,我真的不想从 MongoDB 集合中带回任何数据。这可能吗?
    【解决方案2】:
    • 使用 mongodb 和 spark 连接器,您可以将 MongoDB 数据加载到 spark 中,以利用 sparks 范围的 API(Spark SQL、Spark 流式处理、机器学习和图形 API)对 mongodb 数据执行丰富的聚合
    • 这使您能够利用 spark 的功能来分析您的数据卸载到 Spark
    • 这是双向连接器,您可以将 mongodb 数据加载到 spark 并将 RDD 返回到 MongoDB

    第一条指令是否意味着entities_slim集合是 从 MongoDB 集群复制到 spark 集群,并且 表示为 Spark DataFrame?

    是的

    如果是,这是否意味着连接器只是一个工具 在 MongoDB 和 Spark 之间读/写数据?

    是的

    如果是,有没有办法创建运行 MongoDB 查询的 spark 作业 MongoDB 引擎?

    您可能需要在 mongodb 本身中查询来自 mongodb 的数据?您可以将数据处理成 spark 并将其存储回 mongodb

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-27
      • 2023-01-29
      • 2017-09-28
      • 1970-01-01
      • 1970-01-01
      • 2010-09-28
      • 2010-09-26
      • 2011-09-07
      相关资源
      最近更新 更多