2016-08-11 3 views
0

spongのmongo hadoop(https://github.com/mongodb/mongo-hadoop)ライブラリを使用して、mongoコレクションでいくつかの集約操作を実行しようとしています。私は、newApiHadoopRDDへの入力として送信されるmongo.input.queryの設定を使ってクエリを入力しました。Mongo Hadoop Connecterでサポートされている集合体ですか?

Configuration mongodbConfig = new Configuration(); 
mongodbConfig.set("mongo.job.input.format","com.mongodb.hadoop.MongoInputFormat"; 
mongodbConfig.set("mongo.input.uri","mongodb://"+mongodbHost+"/"+database.collection); 
mongodbConfig.set("mongo.input.query",query); 

JavaPairRDD audienceRDD = sc.newAPIHadoopRDD(mongodbConfig, MongoInputFormat.class,Object.class, BSONObject.class); 
audienceRDD.foreach(e -> System.out.println("data: "+e.toString())); 


query={ "aggregate" : "__collection__" , "pipeline" : [ 
{ "$match" : { "date" : { "$gte" : { "$date" : "2016-08-09T00:00:00.000Z"} , "$lte" : { "$date" : "2016-08-11T00:00:00.000Z"}}}} , 
{ "$unwind" : "$segments"} , 
{ "$group" : { "_id" : "$segments" , "audienceSize" : { "$sum" : "$count"}}}]}, sort={ }, fields={ }, limit=0, notimeout=false} 

検索のような通常のクエリを使用する場合は、操作は成功します。しかし、私がgroupByを使用しようとすると、RDDのレコードは得られません。 mongo hadoopコネクタを使用してmongoコレクションの集約操作を行う方法を提案する人もいます。

答えて

0

とにかく、集計クエリの実行に16 MBの制限があるため、レコードを持つtemporaryCollectionを作成してから、その一時コレクションに対してクエリを作成しました。 RDD上にレスポンスを保存し、やりたいことが終わったら一時的なコレクションを削除しました。

これは、mongo.input.queryを使用して集約クエリを作成する機能を追加することが、この素晴らしいコネクタライブラリにうってつけの追加だと言いました。

関連する問題