【问题标题】:MongoDB query filters using Stratio's Spark-MongoDB library使用 Stratio 的 Spark-MongoDB 库的 MongoDB 查询过滤器
【发布时间】:2016-10-12 00:36:45
【问题描述】:

我正在尝试使用 Stratio 的 Spark-MongoDB library 查询 MongoDB 集合。我按照this 线程开始使用,我目前正在运行以下代码:

reader = sqlContext.read.format("com.stratio.datasource.mongodb")
data = reader.options(host='<ip>:27017', database='<db>', collection='<col>').load()

这会将整个集合加载到 Spark 数据帧中,并且由于集合很大,这会花费很多时间。有什么方法可以指定查询过滤器并仅将选定的数据加载到 Spark 中?

【问题讨论】:

    标签: mongodb apache-spark pyspark apache-spark-sql stratio


    【解决方案1】:

    Spark 数据帧处理需要架构知识。在使用具有灵活和/或未知模式的数据源时,Spark 必须先发现其模式,然后才能对数据进行任何操作。这就是load() 所做的。它查看数据只是为了发现data 的模式。当您对data 执行操作时,例如collect(),Spark 将实际读取数据以进行处理。

    只有一种方法可以从根本上加快load() 的速度,那就是自己提供架构,从而避免架构发现的需要。这是取自the library documentation的示例:

    import org.apache.spark.sql.types._
    val schemaMongo = StructType(StructField("name", StringType, true) :: StructField("age", IntegerType, true ) :: Nil)
    val df = sqlContext.read.schema(schemaMongo).format("com.stratio.datasource.mongodb").options(Map("host" -> "localhost:27017", "database" -> "highschool", "collection" -> "students")).load
    

    您可以通过将schema_samplingRatio 配置参数设置为小于1.0 默认值的值,仅对集合中的一小部分文档进行采样,从而获得轻微的收益。但是,由于 Mongo 没有内置采样,您仍然可能会访问大量数据。

    【讨论】:

      猜你喜欢
      • 2021-03-19
      • 2019-11-24
      • 1970-01-01
      • 1970-01-01
      • 2012-03-27
      • 1970-01-01
      • 1970-01-01
      • 2018-02-04
      • 1970-01-01
      相关资源
      最近更新 更多