MongoDB Spark

来源:互联网 发布:淘宝信用贷款逾期20天 编辑:程序博客网 时间:2024/05/16 19:18

MongoDB Spark Connector介绍

  1. 支持读取和写入,即可以将计算后的结果写入MongoDB
  2. 将查询拆分为n个子任务, 如Connector会将一次match,拆分为多个子任务交给spark来处理, 减少数据的全量读取

MongoDB Spark 示例代码

计算用类型Type=1的message字符数并按userid进行分组
开发Maven dependency配置

这里用的是mongo-spark-connector_2.11 的2.0.0版本和spark的spark-core_2.11的2.0.2版本

    <dependency>        <groupId>org.mongodb.spark</groupId>        <artifactId>mongo-spark-connector_2.11</artifactId>        <version>2.0.0</version>    </dependency>    <dependency>        <groupId>org.apache.spark</groupId>        <artifactId>spark-core_2.11</artifactId>        <version>2.0.2</version>    </dependency>
示例代码
    import com.mongodb.spark._    import org.apache.spark.{SparkConf, SparkContext}    import org.bson._    val conf = new SparkConf()      .setMaster("local")      .setAppName("Mingdao-Score")      //同时还支持mongo驱动的readPreference配置, 可以只从secondary读取数据      .set("spark.mongodb.input.uri", "mongodb://xxx.xxx.xxx.xxx:27017,xxx.xxx.xxx:27017,xxx.xxx.xxx:27017/inputDB.collectionName")      .set("spark.mongodb.output.uri", "mongodb://xxx.xxx.xxx.xxx:27017,xxx.xxx.xxx:27017,xxx.xxx.xxx:27017/outputDB.collectionName")    val sc = new SparkContext(conf)    // 创建rdd    val originRDD = MongoSpark.load(sc)    // 构造查询    val dateQuery = new BsonDocument()      .append("$gte", new BsonDateTime(start.getTime))      .append("$lt", new BsonDateTime(end.getTime))    val matchQuery = new Document("$match", BsonDocument.parse("{\"type\":\"1\"}"))    // 构造Projection    val projection1 = new BsonDocument("$project", BsonDocument.parse("{\"userid\":\"$userid\",\"message\":\"$message\"}")    val aggregatedRDD = originRDD.withPipeline(Seq(matchQuery, projection1))    //比如计算用户的消息字符数    val rdd1 = aggregatedRDD.keyBy(x=>{      Map(        "userid" -> x.get("userid")      )    })    val rdd2 = rdd1.groupByKey.map(t=>{      (t._1, t._2.map(x => {        x.getString("message").length      }).sum)    })    rdd2.collect().foreach(x=>{        println(x)    })    //保持统计结果至MongoDB outputurl 所指定的数据库    MongoSpark.save(rdd2)


作者:RavenZZ
链接:http://www.jianshu.com/p/dbac491317cc
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。