使用java将rdd保存到mongo数据库中

xjreopfe  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(345)

我正试图用java保存mongodb中的tweets,这就是我所拥有的;

JavaStreamingContext ssc = new JavaStreamingContext(sc, new Duration(
            3000));
    JavaDStream<Status> tweets = TwitterUtils.createStream(ssc);

    JavaDStream<String> statuses = tweets
            .map(new Function<Status, String>() {
                public String call(Status status) {
                    return status.getUser().getName() + ":"
                            + status.getText();
                }
            });

    JavaDStream<String> users = tweets.map(new Function<Status, String>() {
        public String call(Status status) {
            return status.getUser().getName();
        }
    });

    users.foreachRDD(new Function<JavaRDD<String>, Void>() {
        public Void call(JavaRDD<String> rdd) throws Exception {
            if (rdd.count() > 0)
                rdd.saveAsTextFile("storage/users/test" + rdd.id()
                        + "_.txt");
            return null;
        }
    });

正如您所见,我可以使用rdd.saveastextfile将用户存储在文本文件中,但我需要的是一种将此rdd保存到数据库(mongodb)的方法。

weylhg0b

weylhg0b1#

您可以使用mongodbhadoop连接器来存储rdd,并使用 com.mongodb.hadoop.MongoOutputFormat :

Configuration config = new Configuration();
config.set("mongo.output.format", "com.mongodb.hadoop.MongoOutputFormat");
config.set("mongo.output.uri", "mongodb://host:port/database.collection");
rdd.saveAsNewAPIHadoopFile("file://this-is-not-used",
                           <keyClass>,
                           <valueClass>,
                           MongoOutputFormat.class,
                           config);

查看一个示例项目来了解如何做到这一点也可能会有所帮助。

相关问题