gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 09:35:00 24 4
gpt4 key购买 nike

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

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() 的速度,那就是自己提供模式,从而避免模式发现的需要。这是取自 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 默认值的值,您可以仅对集合中的一小部分文档进行采样,从而获得轻微的 yield 。但是,由于 Mongo 没有内置采样,您仍然可能会访问大量数据。

关于使用 Stratio 的 Spark-MongoDB 库的 MongoDB 查询过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37758470/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com