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

 

posted @ 2020-07-31 16:42  小戈戈不怕黑  阅读(618)  评论(0编辑  收藏  举报