Difference between revisions of "MAPREDUCE Tutorial"
m (test) |
m |
||
Line 23: | Line 23: | ||
return v; | return v; | ||
}, | }, | ||
− | {out:{inline:1}} | + | {out: {inline: 1}} |
− | ) | + | ); |
− | |||
− | |||
− | |||
</nowiki></pre> | </nowiki></pre> | ||
+ | <pre class="ans"><nowiki>db.world.mapReduce(function(){if(this.continent=="Europe"){emit(this.name,null)}},function(_,v){return v},{out:{inline:1}})</nowiki></pre> | ||
</div> | </div> | ||
Line 43: | Line 41: | ||
}, | }, | ||
{out:{inline:1}} | {out:{inline:1}} | ||
− | ) | + | );</nowiki></pre> |
− | </nowiki></pre> | + | <pre class="ans"><nowiki>db.world.mapReduce(function(){emit('World Population in Millions',this.population)},function(_,values){return Math.round(Array.sum(values)/1000000)*1000000},{out:{inline:1}});</nowiki></pre> |
− | <pre class="ans"><nowiki> | ||
− | db.world.mapReduce(function(){emit('World Population in Millions',this.population)},function(_,values){return Math.round(Array.sum(values)/1000000)*1000000},{out:{inline:1}}) | ||
− | </nowiki></pre> | ||
</div> | </div> | ||
Line 60: | Line 55: | ||
return null; | return null; | ||
}, | }, | ||
− | {out:{inline: 1}} | + | {out: {inline: 1}} |
− | ) | + | );</nowiki></pre> |
− | </nowiki></pre> | + | <pre class="ans"><nowiki>db.world.mapReduce(function(){emit((this.name).substring(0,1),1)},function(_,values){return Array.sum(values)},{out:{inline:1}});</nowiki></pre> |
− | <pre class="ans"><nowiki> | ||
− | db.world.mapReduce(function(){emit((this.name).substring(0,1),1)},function(_,values){return Array.sum(values)},{out:{inline:1}}) | ||
− | </nowiki></pre> | ||
</div> | </div> | ||
Line 78: | Line 70: | ||
return null; | return null; | ||
}, | }, | ||
− | {out:{inline:1}} | + | {out: {inline: 1}} |
− | ) | + | ); |
− | |||
− | |||
− | |||
</nowiki></pre> | </nowiki></pre> | ||
+ | <pre class="ans"><nowiki>db.world.mapReduce(function(){emit(this.continent,1)},function(_,v){return Array.sum(v)},{out:{inline:1}})</nowiki></pre> | ||
</div> | </div> | ||
Line 96: | Line 86: | ||
return null; | return null; | ||
}, | }, | ||
− | {out:{inline:1}} | + | {out: {inline: 1}} |
− | ) | + | ); |
− | |||
− | |||
− | |||
</nowiki></pre> | </nowiki></pre> | ||
+ | <pre class="ans"><nowiki>db.world.mapReduce(function(){emit(this.name,this.area)},function(_,v){return v},{limit:3,out:{inline:1},query:{"$and":[{"area":{"$ne":null}},{"area":{"$ne":0}}]},sort:{"area":1}});</nowiki></pre> | ||
</div> | </div> | ||
Line 115: | Line 103: | ||
}, | }, | ||
{out:{inline:1}} | {out:{inline:1}} | ||
− | ) | + | );</nowiki></pre> |
− | </nowiki></pre> | + | <pre class="ans"><nowiki>db.world.mapReduce(function(){emit(this.continent,{first:this.name,last:this.name})},function(_,v){let r={first:'ZZZ',last:'AAA'};for(let i=0;i<v.length;i++){if(r.first>v[i].first){r.first=v[i].first} |
− | <pre class="ans"><nowiki> | ||
− | db.world.mapReduce(function(){emit(this.continent,{first:this.name,last:this.name})},function(_,v){let r={first:'ZZZ',last:'AAA'};for(let i=0;i<v.length;i++){if(r.first>v[i].first){r.first=v[i].first} | ||
if(r.last<v[i].last){r.last=v[i].last}} | if(r.last<v[i].last){r.last=v[i].last}} | ||
− | return r},{out:{inline:1}}) | + | return r},{out:{inline:1}});</nowiki></pre> |
− | </nowiki></pre> | ||
</div> | </div> | ||
<div class="q" data-lang="mongo"> | <div class="q" data-lang="mongo"> | ||
Line 133: | Line 118: | ||
return null; | return null; | ||
}, | }, | ||
− | {out:{inline:1}} | + | {out: {inline: 1}} |
− | ) | + | ); |
− | |||
− | |||
− | |||
− | |||
</nowiki></pre> | </nowiki></pre> | ||
+ | <pre class="ans"><nowiki>db.world.mapReduce(function(){if((this.name).startsWith('M')){emit(this.name,null)} | ||
+ | if((this.capital).startsWith('M')){emit(this.capital,null)}},function(_,v){return v},{out:{inline:1}});</nowiki></pre> | ||
</div> | </div> | ||
Line 163: | Line 146: | ||
}, | }, | ||
{out:{inline:1}} | {out:{inline:1}} | ||
− | ) | + | );</nowiki></pre> |
− | </nowiki></pre> | + | <pre class="ans"><nowiki>db.world.mapReduce(function(){if(this.capital){emit((this.capital).substring(0,1),{first:this.capital,last:this.capital})}},function(_,v){let r={first:'ZZZ',last:'AAA',count:0};for(let i=0;i<v.length;i++){if(r.first>v[i].first){r.first=v[i].first};if(r.last<v[i].last){r.last=v[i].last};r.count+=1} |
− | <pre class="ans"><nowiki> | ||
− | db.world.mapReduce(function(){if(this.capital){emit((this.capital).substring(0,1),{first:this.capital,last:this.capital})}},function(_,v){let r={first:'ZZZ',last:'AAA',count:0};for(let i=0;i<v.length;i++){if(r.first>v[i].first){r.first=v[i].first};if(r.last<v[i].last){r.last=v[i].last};r.count+=1} | ||
return r},{finalize:function(_,v){if(!v.count){v.count=1} | return r},{finalize:function(_,v){if(!v.count){v.count=1} | ||
− | return v},out:{inline:1}}) | + | return v},out:{inline:1}});</nowiki></pre> |
− | </nowiki></pre> | ||
</div> | </div> | ||
Line 189: | Line 169: | ||
return null; | return null; | ||
}, | }, | ||
− | {out:{inline:1}} | + | {out: {inline: 1}} |
− | ) | + | );</nowiki></pre> |
− | </nowiki></pre> | + | <pre class="ans"><nowiki>db.world.mapReduce(function(){var p=this.population;switch(!0){case p<1000000:emit("0 TO 1000000",1);break;case p<2000000:emit("1000000 TO 2000000",1);break;case p<3000000:emit("2000000 TO 3000000",1);break;case p<5000000:emit("3000000 TO 5000000",1);break;case p<10000000:emit("5000000 TO 10000000",1);break;case p<15000000:emit("10000000 TO 15000000",1);break |
− | <pre class="ans"><nowiki> | + | case p>15000000:emit("MORE THAN 15000000",1);break}},function(_,v){return Array.sum(v)},{out:{inline:1}});</nowiki></pre> |
− | db.world.mapReduce(function(){var p=this.population;switch(!0){case p<1000000:emit("0 TO 1000000",1);break;case p<2000000:emit("1000000 TO 2000000",1);break;case p<3000000:emit("2000000 TO 3000000",1);break;case p<5000000:emit("3000000 TO 5000000",1);break;case p<10000000:emit("5000000 TO 10000000",1);break;case p<15000000:emit("10000000 TO 15000000",1);break | ||
− | case p>15000000:emit("MORE THAN 15000000",1);break}},function(_,v){return Array.sum(v)},{out:{inline:1}}) | ||
− | </nowiki></pre> | ||
</div> | </div> |
Revision as of 19:24, 21 June 2018
MapReduce - The Basics
This tutorial introduces the MapReduce
command.
MapReduce examples are available.
- Together they can solve a huge range of common database queries.
- They can be distributed effectively; you can share the work load among a number of processors and get your answer faster.
It is recommended to have some familiarity with JavaScript before attempting the following questions: JavaScript | MDN
Map
The map function can be used to filter and transform the data:
Use a map function to get the names of countries in Europe.
db.world.mapReduce( function(){ if (this.continent === "Europe"){ emit(this.name, null); } }, function(k, v){ return v; }, {out: {inline: 1}} );
db.world.mapReduce(function(){if(this.continent=="Europe"){emit(this.name,null)}},function(_,v){return v},{out:{inline:1}})
Use the previous answer to find the population of the world to the nearest million.
db.world.mapReduce( function(){ emit(null, null); }, function(k, v){ return null; }, {out:{inline:1}} );
db.world.mapReduce(function(){emit('World Population in Millions',this.population)},function(_,values){return Math.round(Array.sum(values)/1000000)*1000000},{out:{inline:1}});
For each letter, determine how many country names begin with that letter.
db.world.mapReduce( function(){ emit(null, null); }, function(k, v){ return null; }, {out: {inline: 1}} );
db.world.mapReduce(function(){emit((this.name).substring(0,1),1)},function(_,values){return Array.sum(values)},{out:{inline:1}});
Show the number of countries in each continent.
db.world.mapReduce( function(){ emit(null, null); }, function(k, v){ return null; }, {out: {inline: 1}} );
db.world.mapReduce(function(){emit(this.continent,1)},function(_,v){return Array.sum(v)},{out:{inline:1}})
Show the name and area of the smallest 3 countries by area. Ignore records where the area is 0 or null.
db.world.mapReduce( function(){ emit(null, null); }, function(k, v){ return null; }, {out: {inline: 1}} );
db.world.mapReduce(function(){emit(this.name,this.area)},function(_,v){return v},{limit:3,out:{inline:1},query:{"$and":[{"area":{"$ne":null}},{"area":{"$ne":0}}]},sort:{"area":1}});
For each continent, find the first and last country alphabetically.
db.world.mapReduce( function(){ emit(null, null); }, function(k, v){ return null; }, {out:{inline:1}} );
db.world.mapReduce(function(){emit(this.continent,{first:this.name,last:this.name})},function(_,v){let r={first:'ZZZ',last:'AAA'};for(let i=0;i<v.length;i++){if(r.first>v[i].first){r.first=v[i].first} if(r.last<v[i].last){r.last=v[i].last}} return r},{out:{inline:1}});
Return country names or capital cities that start with a letter 'M' as keys, use null as the value.
db.world.mapReduce( function(){ emit(null, null); }, function(k, v){ return null; }, {out: {inline: 1}} );
db.world.mapReduce(function(){if((this.name).startsWith('M')){emit(this.name,null)} if((this.capital).startsWith('M')){emit(this.capital,null)}},function(_,v){return v},{out:{inline:1}});
For each letter in the alphabet, find the amount of cities and the cities that come first and last alphabetically. e.g.
{ "_id" : "B", "value" : { "first" : "Baghdad", "last" : "Bujumbura", "count" : 25 } },
db.world.mapReduce( function(){ emit(null, null); }, function(k, v){ return null; }, {out:{inline:1}} );
db.world.mapReduce(function(){if(this.capital){emit((this.capital).substring(0,1),{first:this.capital,last:this.capital})}},function(_,v){let r={first:'ZZZ',last:'AAA',count:0};for(let i=0;i<v.length;i++){if(r.first>v[i].first){r.first=v[i].first};if(r.last<v[i].last){r.last=v[i].last};r.count+=1} return r},{finalize:function(_,v){if(!v.count){v.count=1} return v},out:{inline:1}});
Show country count for countries in the following ranges:
0 to 1000000 1000000 to 2000000 2000000 to 3000000 3000000 to 5000000 5000000 to 10000000 10000000 to 15000000 More than 15000000
db.world.mapReduce( function(){ emit(null, null); }, function(k, v){ return null; }, {out: {inline: 1}} );
db.world.mapReduce(function(){var p=this.population;switch(!0){case p<1000000:emit("0 TO 1000000",1);break;case p<2000000:emit("1000000 TO 2000000",1);break;case p<3000000:emit("2000000 TO 3000000",1);break;case p<5000000:emit("3000000 TO 5000000",1);break;case p<10000000:emit("5000000 TO 10000000",1);break;case p<15000000:emit("10000000 TO 15000000",1);break case p>15000000:emit("MORE THAN 15000000",1);break}},function(_,v){return Array.sum(v)},{out:{inline:1}});