我想从Mongo数据库集合中读取和处理文档,并将更新的集合写回Mongo DB中的新集合。
我正在使用以下代码加载MongoSpark。
SparkSession spark = SparkSession.builder()
.master("local")
.appName("MongoSparkConnectorIntro")
.config("spark.mongodb.input.uri", "mongodb://127.0.0.1/test.myCollection1")
.config("spark.mongodb.output.uri", "mongodb://127.0.0.1/test.myCollection2")
.getOrCreate();
JavaSparkContext jsc = new JavaSparkContext(spark.sparkContext());
JavaMongoRDD<Document> rdd = MongoSpark.load(jsc);
在JavaMongoRDD实例中加载文档后,我想处理它们(选择并更新文档),然后最终将文档写入另一个集合。
我不确定处理/应用转换的正确方法,如'rdd&#39;实例,最后将更新的文档写入Mongo DB目标集合。
MongoSpark.save(rdd);
在写入目标集合之前,有人可以帮我了解如何使用Mongo Spark / Spark API处理从Mongo数据库集合加载的数据。
我正在使用mongo-spark-connector_2.11和spark-core_2.11。
答案 0 :(得分:1)
以RDD格式加载数据
您可以将JavaSparkContext
或SQLContext
传递给MongoSpark#load
,以便从MongoDB轻松阅读JavaRDD
// Loading and analyzing data from MongoDB
JavaMongoRDD<Document> rdd = MongoSpark.load(jsc);
System.out.println(rdd.count());
System.out.println(rdd.first().toJson());
保存RDD数据
将RDD
数据保存到MongoDB时,它必须是可以转换为Bson文档的类型。您可能需要添加map
步骤才能将数据转换为Document
(或BsonDocument
a DBObject
)。
JavaRDD<Document> documents = jsc.parallelize(asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)).map
(new Function<Integer, Document>() {
@Override
public Document call(final Integer i) throws Exception {
return Document.parse("{test: " + i + "}");
}
});
MongoSpark.save(documents);