Skip to content

Instantly share code, notes, and snippets.

@fforbeck
Created March 18, 2013 20:06
Show Gist options
  • Save fforbeck/5190368 to your computer and use it in GitHub Desktop.
Save fforbeck/5190368 to your computer and use it in GitHub Desktop.
mapred
var map_func = function() {
var imps = this.impressions;
var clicks = this.clicks;
emit(this.domain, {'impressions': imps, 'clicks': clicks });
};
var reduce_func = function(key, values) {
var sumImpressions = 0;
var sumClicks = 0;
values.forEach(function(v) {
sumImpressions += v.impressions;
sumClicks += v.clicks;
});
var ctr = (sumClicks / sumImpressions) * 100;
return {'sumImpressions': sumImpressions, 'sumClicks': sumClicks, 'ctr': ctr};
};
db.website_performance.mapReduce(map_func, reduce_func, {out: 'best_rated_domains', query: {'impressions' : { $gte : NumberLong(0) }, 'clicks': { $gte : NumberLong(0) }}});
@julianovidal
Copy link

function calc_best_rate_domains() {

var q = db.website_performance.find({impressions:{ $gte: 10000 }, clicks: {$gte: 500} }, {domain: 1, impressions:1, clicks:1});

var s_imp = 0;
var s_clk = 0;

q.forEach(function (r) {
    db.best_rated_domains.update({ domain: r.domain }, {$inc: { impressions: r.impressions, clicks: r.clicks }}, true, false);
});

var q2 = db.best_rated_domains.find();

q2.forEach(function(r2) {

    var s_imp = r2.impressions;
    var s_clk = r2.clicks;

    var ctr = (s_clk / s_imp) * 100;

    ctr = ctr.toFixed(3);

    r2.ctr = Number(ctr);

    db.best_rated_domains.save(r2);
});

}

@julianovidal
Copy link

var map_func = function() {
emit(this.domain, {'impressions': Number(this.impressions + ""), 'clicks': Number(this.clicks + "") } );
};

var reduce_func = function(key, values) {

var reduce_value = {impressions: 0, clicks: 0, ctr: 0};

for (var idx = 0; idx < values.length; idx++) {
    reduce_value.impressions += values[idx].impressions;
    reduce_value.clicks += values[idx].clicks;
}

if(reduce_value.clicks > 0)
    reduce_value.ctr = (reduce_value.clicks / reduce_value.impressions) * 100;
else
    reduce_value.ctr = 0.0;

return reduce_value;

};

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment