MongoDB 使用 Stratio 的 Spark-MongoDB 库查询过滤器
MongoDB query filters using Stratio's Spark-MongoDB library
我正在尝试使用 Stratio 的 Spark-MongoDB library. I followed 线程查询一个 MongoDB 集合,我目前正在 运行 以下部分代码:
reader = sqlContext.read.format("com.stratio.datasource.mongodb")
data = reader.options(host='<ip>:27017', database='<db>', collection='<col>').load()
这会将整个集合加载到 Spark 数据帧中,并且由于集合很大,这会花费很多时间。有什么方法可以指定查询过滤器并仅将选定的数据加载到 Spark 中吗?
Spark 数据帧处理需要模式知识。当使用具有灵活 and/or 未知模式的数据源时,在 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 没有内置采样,您仍然可能会访问大量数据。
我正在尝试使用 Stratio 的 Spark-MongoDB library. I followed
reader = sqlContext.read.format("com.stratio.datasource.mongodb")
data = reader.options(host='<ip>:27017', database='<db>', collection='<col>').load()
这会将整个集合加载到 Spark 数据帧中,并且由于集合很大,这会花费很多时间。有什么方法可以指定查询过滤器并仅将选定的数据加载到 Spark 中吗?
Spark 数据帧处理需要模式知识。当使用具有灵活 and/or 未知模式的数据源时,在 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 没有内置采样,您仍然可能会访问大量数据。