On 30 Aug 2009, at 11:36, Francisco Viramontes wrote:
> Hi list!
>
> I hava a question about grouping and the reduce function
>
> If aI want to average the sum of manu values returned by my map
> function on a large database (~100000 rows ) the reduce function
> gets called with the rereduce boolean
>
> The thing is a am not sure if its mathematically correct to average
> sets of floats in groups as optimized by couch where I can have to
> average smaller sets of previously averaged values. I certainly dont
> get the exact same result of averaging a whole set than a grouped set.
>
> My question is how can I handle my reduce function to reduce a whole
> set and not in groups?
>
> Note the emit call is done with complex keys:
>
> map:
>
> function(doc) {
> if ((doc['couchrest-type'] == 'RawData') && doc
> ['device_variable_id']) {
> date = new Date(doc.date_time);
> emit([doc.device_variable_id, date.getFullYear(),
> date.getUTCMonth() + 1, date.getUTCDate(), date.getUTCHours(),
> parseInt(date.getUTCMinutes() / 20 + 1) ], doc.value);
> }
> }
>
> reduce:
>
> function( keys, values, rereduce ) {
> if(rereduce){
> log("rereduce");
> }
> return sum( values ) / values.length ;
> }
You cannot ignore the call where rereduce is true. See http://svn.apache.org/viewvc/couchdb/trunk/share/www/script/test/reduce.js?revision=804727&content-type=text%2Fplain
scroll down a little:
" var reduceCombine = function (keys, values, rereduce) { "
for an example.
|