MapReduce MongoDB用户代理
我在Mongo DB中有500万个条目,如下所示:MapReduce MongoDB用户代理,mongodb,hadoop,mapreduce,mongodb-java,Mongodb,Hadoop,Mapreduce,Mongodb Java,我在Mongo DB中有500万个条目,如下所示: { "_id" : ObjectId("525facace4b0c1f5e78753ea"), "productId" : null, "name" : "example name", "time" : ISODate("2013-10-17T09:23:56.131Z"), "type" : "hover", "url" : "www.example.com", "userAgent"
{
"_id" : ObjectId("525facace4b0c1f5e78753ea"),
"productId" : null,
"name" : "example name",
"time" : ISODate("2013-10-17T09:23:56.131Z"),
"type" : "hover",
"url" : "www.example.com",
"userAgent" : "curl/7.24.0 (x86_64-apple-darwin12.0) libcurl/7.24.0 openssl/0.9.8r zlib/1.2.5"
}
我需要在每个条目中添加一个名为device
的新字段,该字段的值为desktop
或mobile
。这意味着,目标将是有以下类型的条目:
{
"_id" : ObjectId("525facace4b0c1f5e78753ea"),
"productId" : null,
"device" : "desktop",
"name" : "example name",
"time" : ISODate("2013-10-17T09:23:56.131Z"),
"type" : "hover",
"url" : "www.example.com",
"userAgent" : "curl/7.24.0 (x86_64-apple-darwin12.0) libcurl/7.24.0 openssl/0.9.8r zlib/1.2.5"
}
我正在使用MongoDB Java驱动程序,目前我正在做以下工作:
DBObject query = new BasicDBObject();
query.put("device", new BasicDBObject("$exists", false)); //some entries already have such field
DBCursor cursor = resource.find(query);
cursor.addOption(Bytes.QUERYOPTION_NOTIMEOUT);
Iterator<DBObject> iterator = cursor.iterator();
int size = cursor.count();
但是,由于数据量大(超过500万条),这需要花费很长时间
是否有一种使用map reduce实现此目的的方法?到目前为止,我只使用MapReduce进行计数,因此我不确定它是否可以用于其他事项。我发现了一种方法,由于整个配置的原因,这种方法有点棘手 在安装Hadoop之后,我执行了以下操作:
DBObject query = new BasicDBObject();
query.put("device", new BasicDBObject("$exists", false)); //some entries already have such field
DBCursor cursor = resource.find(query);
cursor.addOption(Bytes.QUERYOPTION_NOTIMEOUT);
Iterator<DBObject> iterator = cursor.iterator();
int size = cursor.count();
MongoUpdate
的类,使用方法run
设置所有配置(如输入和输出URI),创建作业并配置所有设置。其中有job.setMapperClass(MongoMapper.class)
MongoMapper
,其中我有一个方法map
,该方法获取一个BSONObject
。这里我执行if-else条件,最后我执行:
Text id=新文本(pValue.get(“_id”).toString();
write(id,新的bsonwriteable(pValue))Main
的主要方法只是实例化一个MongoUpdate
类并运行它run
方法hadoop java nameofjar.jar