Java 使用Mongo Hadoop连接器通过Apache Spark更新MongoDb中的集合

Java 使用Mongo Hadoop连接器通过Apache Spark更新MongoDb中的集合,java,mongodb,apache-spark,rdd,Java,Mongodb,Apache Spark,Rdd,我想通过Java中的Spark更新MongoDb中的一个特定集合。 我正在使用Java从MongoDb检索和保存信息 继桑波·尼斯卡宁的优秀作品之后,我不得不更新收藏 包括一个采用字符串[]updateKeys的构造函数,我猜它指的是一个可能的键列表,用于在现有集合上进行比较并执行更新。但是,使用Spark的saveAsNewApiHadoopFile()方法和参数MongoOutputFormat.class,我想知道如何使用该更新构造函数 save.saveAsNewAPIHadoopFil

我想通过Java中的Spark更新MongoDb中的一个特定集合。 我正在使用Java从MongoDb检索和保存信息

继桑波·尼斯卡宁的优秀作品之后,我不得不更新收藏

包括一个采用字符串[]updateKeys的构造函数,我猜它指的是一个可能的键列表,用于在现有集合上进行比较并执行更新。但是,使用Spark的
saveAsNewApiHadoopFile()
方法和参数
MongoOutputFormat.class
,我想知道如何使用该更新构造函数

save.saveAsNewAPIHadoopFile(“file:///bogus“,Object.class,Object.class,MongoOutputFormat.class,config);
在此之前,用于执行集合更新的。从我在Hadoop上看到的示例来看,这通常是在
mongo.job.output.value
上设置的,可能类似于Spark中的:

save.saveAsNewAPIHadoopFile(“file:///bogus,Object.class,MongoUpdateWritable.class,MongoOutputFormat.class,config);
但是,我仍然想知道如何在
mongoupdatewriteable.java
中指定更新键

诚然,作为一种黑客方式,我将对象的“\u id”设置为文档的键值,这样在执行保存时,集合将覆盖与
\u id
具有相同键值的文档

javapairdd分析结果//(mongoObject,result)的JavaPairRdd
javapairdd save=analyticsResult.mapToPair(s->{
BSONObject o=(BSONObject)s._1;
//对于所有键,将_id设置为key:value_
字符串id=“”;
用于(字符串键:o.keySet()){
id+=key+“:”+(字符串)o.get(键)+“”;
}
o、 放置(“_id”,id);
o、 付诸表决(“结果”,第2条);
返回新的Tuple2(null,o);
});
save.saveAsNewAPIHadoopFile(“file:///bogus“,Object.class,Object.class,MongoOutputFormat.class,config);

我希望使用
MongoOutputFormat
mongoupdatewriteable
配置
通过Spark执行mongodb集合更新,理想情况下使用
saveAsNewAPIHadoopFile()
方法。可能吗?如果没有,是否有其他方法不包括专门将_id设置为我要更新的键值?

我尝试了几种
config.set(“mongo.job.output.value”、“…”)的组合和几种

.saveasnewapiHadoop文件(
"file:///bogus",
类别[任何],
类别[任何],
类[com.mongodb.hadoop.MongoOutputFormat[Any,Any]],
mongo_配置
)
他们都没有成功

我使用
mongoupdatewriteable
类作为映射方法的输出,使其正常工作:

items.map(行=>{
val mongo_id=新对象id(行(“id”).toString)
val query=new basicbonobject()
query.append(“\u id”,mongo\u id)
val update=new basicbonObject()
update.append(“$set”,new basicbonobject()。append(“字段名称”,行(“新值”))
val muw=new mongoupdatewriteable(查询、更新、false、true)
(空,muw)
})
.saveAsNewApiHadoop文件(
"file:///bogus",
类别[任何],
类别[任何],
类[com.mongodb.hadoop.MongoOutputFormat[Any,Any]],
mongo_配置
)
在mongo中执行的原始查询如下:

2014-11-09T13:32:11.609-0800 [conn438] update db.users query: { _id: ObjectId('5436edd3e4b051de6a505af9') } update: { $set: { value: 10 } } nMatched:1 nModified:0 keyUpdates:0 numYields:0 locks(micros) w:24 3ms