使用pyspark查询MongoDB集合

时间:2016-07-27 09:37:32

标签: mongodb apache-spark pyspark-sql

我正在构建一个使用PHP并将 MongoDB 作为数据库的应用程序。跨DB的一个集合包含大量数据,即 8GB 数据。 我对存储在MongoDB集合中的数据执行聚合操作,从而生成统计信息。 但处理大量数据需要很长时间。因此,我选择Apache spark来处理存储在 MongDB集合中的数据 我已配置MongoDB spark connector并在 python 中执行演示脚本,以通过spark从mongo集合中获取数据。

以下是python代码段

from pyspark import SparkContext, SparkConf
from pyspark.sql import SQLContext
conf=SparkConf()
conf.set('spark.mongodb.input.uri','mongodb://[host]/db.collection')
conf.set('spark.mongodb.output.uri','mongodb://[host]/db.collection')
sc = SparkContext(conf=conf)
sqlContext = SQLContext(sc)
df = sqlContext.read.format("com.mongodb.spark.sql.DefaultSource").load()
df.printSchema()
df.registerTempTable("mycollection")
result_data=sqlContext.sql("SELECT * from mycollection limit 10")
result_data.show()

在上面的代码段中,我使用pyspark.sql module生成 RDD 。 但是 RDD 的生成导致从集合中读取所有数据,这需要很长时间才能读取大量数据,而不是 Apache Spark 的原理。 因此建议我使用具有最佳性能的pyspark 读取来自Mongo集合的数据的适当解决方案以及如果与MongoDB进行通信中存在备用包 强>

1 个答案:

答案 0 :(得分:2)

不幸的是,与过滤器不同,limit子句不会传递回Mongo Spark Connector,因此无法自动转换为聚合管道阶段。

但是,您可以随时提供自己的管道阶段,例如:

B2B Transaction Viewer