Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Map reduce在pymongo中执行失败,但在mongo shell中成功_Python_Mongodb_Pymongo - Fatal编程技术网

Python Map reduce在pymongo中执行失败,但在mongo shell中成功

Python Map reduce在pymongo中执行失败,但在mongo shell中成功,python,mongodb,pymongo,Python,Mongodb,Pymongo,关于mongo map reduce,我遇到了一个问题,我的map reduce可以在mongo shell中成功执行,但是当我尝试使用pymongo执行时,我得到了以下错误 以下json是我的集合json格式示例 { "_id" : ObjectId( "4e41661ecacbd10e00012600" ), "timestamp" : "20110809", "variants" : { "407" : { "number_of_ad_clicks" : 101, "n

关于mongo map reduce,我遇到了一个问题,我的map reduce可以在mongo shell中成功执行,但是当我尝试使用pymongo执行时,我得到了以下错误

以下json是我的集合json格式示例

{ "_id" : ObjectId( "4e41661ecacbd10e00012600" ),
  "timestamp" : "20110809",
  "variants" : { "407" : { "number_of_ad_clicks" : 101,
      "number_of_search_keywords" : 20,
      "total_duration" : 4,
      "os" : { "os_2" : 2,
        "os_1" : 1,
        "os_0" : 0 },
      "countries" : { "ge" : 2,
        "ca" : 7,
        "fr" : 2,
        "uk" : 5,
        "us" : 2 },
      "screen_resolutions" : { "(320, 240)" : 5,
        "(640, 480)" : 7,
        "(1024, 960)" : 9,
        "(1280, 768)" : 6 },
      "widgets" : { "widget_1" : 1,
        "widget_0" : 0 },
      "languages" : { "ua_uk" : 8,
        "ca_en" : 6,
        "ca_fr" : 8,
        "us_en" : 1 },
      "search_keywords" : { "search_keyword_15" : 15,
        "search_keyword_14" : 14,
        "search_keyword_17" : 17,
        "search_keyword_16" : 16,
        "search_keyword_11" : 11,
        "search_keyword_10" : 10,
        "search_keyword_13" : 13,
        "search_keyword_12" : 12,
        "search_keyword_19" : 19,
        "search_keyword_18" : 18,
        "search_keyword_9" : 9,
        "search_keyword_8" : 8,
        "search_keyword_5" : 5,
        "search_keyword_4" : 4,
        "search_keyword_7" : 7,
        "search_keyword_6" : 6,
        "search_keyword_1" : 1,
        "search_keyword_3" : 3,
        "search_keyword_2" : 2 },
      "number_of_pageviews" : 38,
      "browsers" : { "browser_4" : 4,
        "browser_0" : 0,
        "browser_1" : 1,
        "browser_2" : 2,
        "browser_3" : 3 },
      "keywords" : { "keyword_5" : 5,
        "keyword_4" : 4,
        "keyword_1" : 1,
        "keyword_0" : 0,
        "keyword_3" : 3,
        "keyword_2" : 2 },
      "number_of_keyword_clicks" : 205,
      "number_of_visits" : 91 },
    "306" : { "number_of_ad_clicks" : 29,
      "number_of_search_keywords" : 4,
      "total_duration" : 4,
      "os" : { "os_2" : 2,
        "os_1" : 1,
        "os_0" : 0 },
      "countries" : { "ge" : 7,
        "ca" : 7,
        "fr" : 6,
        "uk" : 1,
        "us" : 3 },
      "screen_resolutions" : { "(320, 240)" : 2,
        "(640, 480)" : 1,
        "(1024, 960)" : 9,
        "(1280, 768)" : 5 },
      "widgets" : { "widget_1" : 1,
        "widget_0" : 0 },
      "languages" : { "ua_uk" : 2,
        "ca_en" : 8,
        "ca_fr" : 5,
        "us_en" : 4 },
      "search_keywords" : { "search_keyword_1" : 1,
        "search_keyword_3" : 3,
        "search_keyword_2" : 2 },
      "number_of_pageviews" : 35,
      "browsers" : { "browser_4" : 4,
        "browser_0" : 0,
        "browser_1" : 1,
        "browser_2" : 2,
        "browser_3" : 3 },
      "keywords" : { "keyword_5" : 5,
        "keyword_4" : 4,
        "keyword_1" : 1,
        "keyword_0" : 0,
        "keyword_3" : 3,
        "keyword_2" : 2 },
      "number_of_keyword_clicks" : 18,
      "number_of_visits" : 57 },
    "408" : { "number_of_ad_clicks" : 180,
      "number_of_search_keywords" : 41,
      "total_duration" : 7,
      "os" : { "os_2" : 2,
        "os_1" : 1,
        "os_0" : 0 },
      "countries" : { "ge" : 3,
        "ca" : 6,
        "fr" : 3,
        "uk" : 9,
        "us" : 9 },
      "screen_resolutions" : { "(320, 240)" : 9,
        "(640, 480)" : 9,
        "(1024, 960)" : 5,
        "(1280, 768)" : 10 },
      "widgets" : { "widget_1" : 1,
        "widget_0" : 0 },
      "languages" : { "ua_uk" : 3,
        "ca_en" : 2,
        "ca_fr" : 10,
        "us_en" : 7 },
      "search_keywords" : { "search_keyword_37" : 37,
        "search_keyword_36" : 36,
        "search_keyword_28" : 28,
        "search_keyword_29" : 29,
        "search_keyword_24" : 24,
        "search_keyword_25" : 25,
        "search_keyword_26" : 26,
        "search_keyword_27" : 27,
        "search_keyword_20" : 20,
        "search_keyword_21" : 21,
        "search_keyword_22" : 22,
        "search_keyword_23" : 23,
        "search_keyword_39" : 39,
        "search_keyword_38" : 38,
        "search_keyword_40" : 40,
        "search_keyword_15" : 15,
        "search_keyword_14" : 14,
        "search_keyword_17" : 17,
        "search_keyword_16" : 16,
        "search_keyword_11" : 11,
        "search_keyword_10" : 10,
        "search_keyword_13" : 13,
        "search_keyword_12" : 12,
        "search_keyword_33" : 33,
        "search_keyword_32" : 32,
        "search_keyword_31" : 31,
        "search_keyword_30" : 30,
        "search_keyword_19" : 19,
        "search_keyword_18" : 18,
        "search_keyword_35" : 35,
        "search_keyword_34" : 34,
        "search_keyword_9" : 9,
        "search_keyword_8" : 8,
        "search_keyword_5" : 5,
        "search_keyword_4" : 4,
        "search_keyword_7" : 7,
        "search_keyword_6" : 6,
        "search_keyword_1" : 1,
        "search_keyword_3" : 3,
        "search_keyword_2" : 2 },
      "number_of_pageviews" : 25,
      "browsers" : { "browser_4" : 4,
        "browser_0" : 0,
        "browser_1" : 1,
        "browser_2" : 2,
        "browser_3" : 3 },
      "keywords" : { "keyword_5" : 5,
        "keyword_4" : 4,
        "keyword_1" : 1,
        "keyword_0" : 0,
        "keyword_3" : 3,
        "keyword_2" : 2 },
      "number_of_keyword_clicks" : 15,
      "number_of_visits" : 19 } },
  "site_name" : "radiotiempo.com",
  "number_of_variants" : 3 }
这是我的地图

map = function(){
    emit(1, {variants:this.variants});
}

reduce = function(key, vals) {
    var returnValue = { 
      clicks: 0, 
     };
    for(var j = 0 ; j < vals.length; j++){
       for(var i = 0 ; i < variant_ids.length; i++){
          try{
             returnValue.clicks += vals[j].variants[variant_ids[i]].number_of_ad_clicks;
          }catch(err)
          {}
       }
    }
    return returnValue;
}


function emit(k, v) {
    print("emit");
    print("  k:" + k + " v:" + tojson(v));
}

res = db.variant_daily_collection.mapReduce(map, reduce, {"scope": {'variant_ids': ['4519','4518']}, "out" : "myoutput", "query":{"site_name": {'$in':['julie2.com','julie3.com']}, 'timestamp': {'$gte':'20110601','$lte':'20110603'}}})
db.myoutput.find()
map=function(){
emit(1,{variants:this.variants});
}
减少=功能(键,VAL){
var returnValue={
点击次数:0,
};
对于(var j=0;j
以下代码是我使用pymongo库编写的python代码

map = Code("function () {"
                   "    emit(1, {variants:this.variants});"
                   "}")
        reduce = Code("function (key, values) {"
                      "   var result = {"
                      "       clicks: 0"
                      "   };"
                      "   for (var i = 0; i < values.length; i++) {"
                      "       for(var j = 0 ; j < variant_ids.length; j++){"
                      "           result.clicks += values[i].variants[variant_ids[j]].number_of_ad_clicks;"
                      "       }"
                      "    }"
                      "    return result;"
                      "}")
map=code(“函数(){”
emit(1,{variants:this.variants})
"}")
reduce=代码(“函数(键、值){”
“变量结果={”
“单击次数:0”
"   };"
“对于(var i=0;i
以下是pymongo返回的错误

In [103]:  reduce = Code("function (key, valudb.variant_daily_collection.map_reduce(map, reduce, out = 'output',full_response = True, fields = {"scope": {'variant_ids': ['398']}, "query":{"site_name": 'routeplanner.net', 'timestamp': '20110809'}} )                                                                                                                   .....: ---------------------------------------------------------------------------OperationFailure                          Traceback (most recent call last)/workspace/construction/<ipython console> in <module>()/workspace/construction/.ve/lib/python2.7/site-packages/pymongo-2.0-py2.7-macosx-10.7-intel.egg/pymongo/collection.py in map_reduce(self, map, reduce, out, merge_output, reduce_output, full_response, **kwargs)
   1031         response = self.__database.command("mapreduce", self.__name,
   1032                                            map=map, reduce=reduce,
-> 1033                                            out=out_conf, **kwargs)
   1034 
   1035         if full_response or not response.get('result'):

/workspace/construction/.ve/lib/python2.7/site-packages/pymongo-2.0-py2.7-macosx-10.7-intel.egg/pymongo/database.py in command(self, command, value, check, allowable_errors, **kwargs)
    338             msg = "command %r failed: %%s" % command
    339             helpers._check_command_response(result, self.connection.disconnect,
--> 340                                             msg, allowable_errors)
    341 
    342         return result

/workspace/construction/.ve/lib/python2.7/site-packages/pymongo-2.0-py2.7-macosx-10.7-intel.egg/pymongo/helpers.py in _check_command_response(response, reset, msg, allowable_errors)
    123                     ex_msg += (", assertionCode: %d" %
    124                                (response["assertionCode"],))
--> 125                 raise OperationFailure(ex_msg, response.get("assertionCode"))
    126             raise OperationFailure(msg % response["errmsg"])
    127 

OperationFailure: db assertion failure, assertion: 'invoke failed: JS Error: TypeError: values[i].variants[variant_ids[j]] has no properties nofile_b:0', assertionCode: 9004

In [104]: 
In[103]:reduce=code(“函数(key,valudb.variant\u daily\u collection.map\u reduce(map,reduce,out='output',full\u response=True,fields={”scope:{'variant\u id':['398']},query:{“site\u name:'routeplan.net”,“timestamp':'20110809'}”)..…:--------------------------------------------------------------------------------------操作失败回溯(最近一次调用)/工作区/构造/输入()/map\u reduce中的workspace/construction/.ve/lib/python2.7/site-packages/pymongo-2.0-py2.7-macosx-10.7-intel.egg/pymongo/collection.py(self、map、reduce、out、merge\u输出、reduce\u输出、完整响应、**kwargs)
1031 response=self.\u database.command(“mapreduce”,self.\u name,
1032 map=map,reduce=reduce,
->1033 out=out_conf,**kwargs)
1034
1035如果完全响应或未响应。获取('result'):
/workspace/construction/.ve/lib/python2.7/site-packages/pymongo-2.0-py2.7-macosx-10.7-intel.egg/pymongo/database.py-in命令(self、命令、值、检查、允许的_错误,**kwargs)
338 msg=“命令%r失败:%%s”%command
339帮助程序。\u检查\u命令\u响应(结果、self.connection.disconnect、,
-->340 msg,允许的错误)
341
342返回结果
/workspace/construction/.ve/lib/python2.7/site-packages/pymongo-2.0-py2.7-macosx-10.7-intel.egg/pymongo/helpers.py输入检查命令响应(响应、重置、消息、允许的错误)
123 ex_msg+=(“,断言代码:%d”%
124(响应[“断言代码],))
-->125 raise操作失败(ex_msg,response.get(“断言代码”))
126提升操作失败(消息%response[“errmsg”])
127
OperationFailure:db assertion failure,assertion:'invoke failed:JS Error:TypeError:values[i]。变体[variant_ID[j]]没有属性nofile_b:0',assertionCode:9004
在[104]中:

除了我在上面的评论中提到的问题外,我在这里看到了一些潜在的问题:

  • 在您的shell示例中,您正在重写
    emit
    ,这意味着您的reduce函数实际上不会运行(如果没有发出任何内容,那么就没有任何内容需要减少)
  • 您使用的
    emit
    格式与
    reduce
    函数返回的格式不同。
    reduce
    需要以与
    emit
    的第二个参数相同的格式返回值,因为
    reduce
    可能会对包含其自身结果的值调用多次(请参阅)
  • 您总是使用键
    1
    发出
    ting,这可能是一个问题,具体取决于您打算如何工作
  • 如上所述,您的代码似乎至少在您使用的循环变量方面有所不同;我没有逐行比较它来判断是否存在任何其他差异,但您最好的选择是直接将javascript函数定义复制到pymongo中的
    code

  • 此外,如果您可以显示您对
    map\u reduce
    的调用以及
    map
    reduce
    函数的调用,也会有所帮助。

    除了我在上面的评论中提到的以外,我在这里看到了一些潜在的问题:

  • 在您的shell示例中,您正在重写
    emit
    ,这意味着您的reduce函数实际上不会运行(如果没有发出任何内容,那么就没有任何内容需要减少)
  • 您使用的
    emit
    格式与
    reduce
    函数返回的格式不同。
    reduce
    需要以与
    emit
    的第二个参数相同的格式返回值,因为
    reduce
    可能会对包含其自身结果的值调用多次(请参阅)
  • 您总是使用键
    1
    发出
    ting,这可能是一个问题,具体取决于您打算如何工作
  • 如上所述,您的代码至少在以下方面有所不同:
    db.variant_daily_collection.map_reduce(m, r, out="myoutput", query={"site_name": {'$in':['julie2.com','julie3.com','radiotiempo.com']}, 'timestamp': {'$gte':'20110601','$lte':'20110809'}}, scope={'variant_ids': ['4519','4518']})