使用Stratio的Spark-MongoDB库的MongoDB查询过滤器



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

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

这会将整个集合加载到 Spark 数据帧中,由于集合很大,因此需要花费大量时间。有没有办法指定查询过滤器并仅将所选数据加载到 Spark 中?

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

只有一种方法可以从根本上加快load(),那就是自己提供架构,从而避免对架构发现的需求。下面是从库文档中获取的示例:

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没有内置采样,因此您仍然可以访问潜在的大量数据。

相关内容

  • 没有找到相关文章

最新更新