参考链接
- MongoDB Connector for Spark官方文档
- Mongo Spark 源码
- 原文:https://www.jianshu.com/p/dbac491317cc
场景:适用于数据清洗,如只需要部分字段:
依赖:
<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>
代码:
package com.edurt.ssi import com.mongodb.spark._ import org.apache.spark.{SparkConf, SparkContext} import org.bson._ object MongoSparkTest { def main(args: Array[String]): Unit = { val conf = new SparkConf() .setMaster("local[4]") .setAppName("Mingdao-Score") .set("spark.mongodb.input.uri", "mongodb://192.168.18.129:27017/swift.booking") .set("spark.mongodb.output.uri", "mongodb://192.168.18.129:27017/outputDB.collectionName") // import com.mongodb.spark.config._ // val readConfig = ReadConfig(Map("collection" -> "employee", "readPreference.name" -> "secondaryPreferred"), Some(ReadConfig(sc))) //同时还支持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 customRdd = MongoSpark.load(sc, readConfig) 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("{\"businessType\":\"B2B\"}")) // 构造Projection val projection1 = new BsonDocument("$project", BsonDocument.parse("{\"businessType\":\"$businessType\",\"bookingNo\":\"$bookingNo\",\"status\":\"$status\"}")) val aggregatedRDD = originRDD.withPipeline(Seq(matchQuery, projection1)) //比如分组 val rdd1 = aggregatedRDD.keyBy(x=>{ Map( "businessType" -> x.get("businessType") ) }) // val rdd2 = rdd1.groupByKey.map(t=>{ // (t._1, t._2.map(x => { // x.getString("message").length // }).sum) // }) rdd1.collect().foreach(x=>{ println(x) }) //保持统计结果至MongoDB outputurl 所指定的数据库 MongoSpark.save(aggregatedRDD) } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?