使用MongoSpark Connector

时间:2017-03-17 10:07:53

标签: java mongodb apache-spark

我想从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。

1 个答案:

答案 0 :(得分:1)

以RDD格式加载数据

您可以将JavaSparkContextSQLContext传递给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);