首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用库的MongoDB查询筛选器

使用库的MongoDB查询筛选器
EN

Stack Overflow用户
提问于 2016-06-10 23:31:37
回答 1查看 419关注 0票数 3

我正在尝试使用Stratio‘Spark 图书馆查询一个图书馆集合。我跟随线程开始工作,目前正在运行以下代码:

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

这将把整个集合加载到Spark中,而且由于集合很大,这需要很长的时间。是否有任何方法来指定查询筛选器并只将选定的数据加载到Spark中?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-11 18:17:42

火花数据处理需要模式知识。当使用灵活和/或未知模式的数据源时,在Spark能够对数据做任何事情之前,它必须发现它的模式。这就是load()所做的。它只为了发现data的模式而查看数据。当您在data上执行一个操作(例如,collect() )时,Spark实际上将读取数据以进行处理。

有一种方法可以从根本上加速load(),那就是自己提供模式,从而避免了对模式发现的需求。下面是从图书馆文献获取的一个示例

代码语言:javascript
复制
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没有内置抽样,所以您仍然可以访问大量的数据。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37758470

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档