spark1.6读取mongoDB
最近公司部分业务数据【txti日志】上报服务终止,但基于该部分数据的报表还需要继续统计,所以调整业务代码为直接读取mongoDB进行统计计算,也对mongoDB命令做了一些调研,下面记录个人的一些小成果,已备日后参考:
import com.mongodb.spark.MongoSpark import org.apache.spark.rdd.{JdbcRDD, RDD} import org.apache.spark.sql.DataFrame import org.apache.spark.{SparkConf, SparkContext} import org.bson.Document val uri = "mongodb://user_name:password@mongoDB_IP:6330/mongoDB_database.table_name val conf = new SparkConf().setAppName("mongo_test") spark.mongodb.input.uri",uri) .set("spark.mongodb.input.partitioner","MongoPaginateBySizePartitioner") .set("spark.mongodb.input.partitionerOptions.partitionKey","_id") .set("spark.mongodb.input.partitionerOptions.partitionSizeMB","128") .set("spark.default.parallelism","1000") val sc = new SparkContext(conf) val query = "{$match:{$and:[{\"create_time\":{\"$gte\":\""+dateday+"\",\"$lt\":\""+nextDay+"\"}},{\"order_status\":\"3\"}]}}" // 定义查询条件 val rdd: RDD[String] = MongoSpark.load(sc).withPipeline(Seq(Document.parse(query))).map(_.toJson) //执行查询语句并将结果转为json格式 // 。。。。。。后续的就是业务中的各种处理逻辑了
上面的部分是直接给出查询语句及体条件进行查询,但对于不熟悉mongo命令的人以及不同版本的mongoDB来说就有一定的局限性了,我个人也是调研学习了两三天才掌握了部分基本命令,所以我个人也通过学习给出通过连接mongo,可以使用sql来查询的方法:
val uri = "mongodb://user_name:password@mongoDB_IP:6330/mongoDB_database.table_name val conf = new SparkConf().setAppName("mongo_test") spark.mongodb.input.uri",uri) .set("spark.mongodb.input.partitioner","MongoPaginateBySizePartitioner") .set("spark.mongodb.input.partitionerOptions.partitionKey","_id") .set("spark.mongodb.input.partitionerOptions.partitionSizeMB","128") .set("spark.default.parallelism","1000") val sc = new SparkContext(conf) val mongoDF: DataFrame = MongoSpark.load(sc).toDF() //调用toDF方法转化为DATAFRAME //。。。。。。后续就可以直接使用rdd或df的算子进行处理了
关于mongoDB的shell命令了,把自己做的一些笔记也做了一些整理,不一定适合所有版本,谨为参考:https://www.cnblogs.com/gegepahei/articles/13411207.html