spark读取mongodb数据配置

原文出处:http://blog.csdn.net/omrapollo/article/details/66968147

引入依赖

创建方法见上一篇博客: Spark+IntelliJ IDEA创建项目

引入如下依赖:
image

实现代码
import org.apache.hadoop.conf.Configuration
import org.apache.log4j.{Level, Logger}
import org.apache.spark.sql.SQLContext
import org.apache.spark.{SparkConf, SparkContext}
import org.bson.{BSONObject, BasicBSONObject}

/**
  * Created by maxi on 2017/3/24.
  */
object MongoTest {
  def main(args: Array[String]) {
    /**
      * 对于所有的spark程序所言,要进行所有的操作,首先要创建一个spark上下文。
      * 在创建上下文的过程中,程序会向集群申请资源及构建相应的运行环境。
      * 设置spark应用程序名称
      * 创建的 sarpkContext 唯一需要的参数就是 sparkConf,它是一组 K-V 属性对。
      */
    val conf = new SparkConf().setAppName("SparkRDDCount").setMaster("local")

    val sc = new SparkContext(conf)

    Logger.getRootLogger.setLevel(Level.WARN)

    val data = sc.parallelize(List(("Tom", "31"), ("Jack", "22"), ("Mary", "25")))

    val config = new Configuration()

    config.set("mongo.input.uri", "mongodb://127.0.0.1:27017/bjhee.sparkoutputtest")

    config.set("mongo.input.fields", """{"name":1, "age":1, "_id":1}""")

    config.set("mongo.input.noTimeout", "true")

    config.set("mongo.output.uri", "mongodb://127.0.0.1:27017/bjhee.sparkoutputtest")

    System.out.println("          =================================           ")

    //    使用MongoOutputFormat将数据写入到MongoDB中
    val rdd = data.map((elem) => {
      val obj = new BasicBSONObject()
      obj.put("name", elem._1)
      obj.put("age", elem._2)
      //转换后的结果,KV对
      //第一个是BSON的ObjectId,插入时可以指定为null,MongoDB Driver在插入到MongoDB时,自动的生成
      //obj是BSONObject,是MongoDB Driver接收的插入对象
      (null, obj)
    })
    //    RDD data is a KV pair,so it can use saveAsNewAPIHadoopFile
    rdd.saveAsNewAPIHadoopFile("file:///bogus", classOf[Any], classOf[Any], classOf[com.mongodb.hadoop.MongoOutputFormat[Any, Any]], config)

    //    使用MongoInputFormat将数据从MongoDB中读取
    val documentRDD = sc.newAPIHadoopRDD(
      config,
      classOf[com.mongodb.hadoop.MongoInputFormat],
      classOf[Object],
      classOf[BSONObject])

    System.out.println("documentRDD = " + documentRDD.count())
    val userRDD = documentRDD.map { case (_, doc) =>
      (getValue(doc, "name"), getValue(doc, "age"))
    }.reduceByKey(_ ++ _).
      collect().
      foreach(println)

    //    documentRDD.saveAsTextFile("b.txt")  // 将数据保存到文件

    System.out.println("          =================================           ")
  }

  def getValue(dbo: BSONObject, key: String) = {
    val value = dbo.get(key)
    if (value eq null) "" else value.asInstanceOf[String]
  }
}
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值