To zadanie zostało wykonane w dwuosobowym zespole o składzie Łukasz Mielewczyk oraz Marek Białousz. Do rozwiązania zadania została wykorzystana baza danych mongoDB. Każdy z nas pracował na swoich kompterach, a na końcu porównywaliśmy wyniki.
Dane zawierają informacje o transakcjach. Pobierz. Kolumny:
Do rozwiązania zadania użyto bazy mongoDB. Należy ją pobrać ze strony i zainstalować. Następnie aby uruchomić bazę danych, należy w konsoli cmd i wydać polecenie:
mongod
{
"result": "result", //miejsce w którym został zapisany wynik obliczeń umieszczony
"timeMillis": 1, //czas obliczeń w milisekundach
"counts": {
"input": 1000001, //ilość danych
"emit": 0, //ilość wygenerowanych par klucz-wartość
"reduce": 0, //ilość odpowiedzi na główny problem
"output": 0 //ilość elementów kolekcji wynikowej
},
"ok": 1
}
Następnie aby zaimportować z pliku do bazy danych (oczywiście baza danych musi być uruchomiona) należy wydać w cmd polecenie:
mongoimport --db test --collection test --file trades.json
var mapFun = function() {
emit(null, this);
};
var reduceFun = function(key, emits) {
return emits[0];
};
mr = db.test.mapReduce(
mapFun,
reduceFun,
{ out: "exampleRecord" }
)
db[mr.result].find();
Przed wykonaniem czynności upewnij się czy dane zostały zaimportowane. Jeśli nie: przeczytaj jak to zrobić. Aby poznać listę oraz ilość kluczy, należy: Strzworzyć poniższą funcję map:
var mapFun = function() {
for( var key in this ) {
emit( key, { count: 1 });
}
};
var reduceFun = function(key, emits) {
total = 0;
for( var i in emits ) {
total += emits[i].count;
}
return { "count": total };
};
mr = db.test.mapReduce(
mapFun,
reduceFun,
{ out: "quantityKeys" }
)
db[mr.result].find();
Przed wykonaniem czynności upewnij się czy dane zostały zaimportowane. Jeśli nie: przeczytaj jak to zrobić. Aby poznać sumę cen biletu z385, należy: Strzworzyć poniższą funcję map:
var mapFun = function() {
emit(this.ticket, this.price);
};
var reduceFun = function(key, emits) {
return Array.sum(emits);
};
mr = db.test.mapReduce(
mapFun,
reduceFun,
{
query: { ticket: "z385" },
out: "sumPrices"
}
)
db[mr.result].find();
Przed wykonaniem czynności upewnij się czy dane zostały zaimportowane. Jeśli nie: przeczytaj jak to zrobić. Aby poznać średnią ilość biletów wydaną przez abcd, należy: Strzworzyć poniższą funcję map:
var mapFun = function() {
emit(this.ticker, this.shares);
};
var reduceFun = function(key, emits) {
return Array.sum(emits)/emits.length;
};
mr = db.test.mapReduce(
mapFun,
reduceFun,
{
query: { ticker: "abcd" },
out: "averageQuantity"
}
)
db[mr.result].find();
Przed wykonaniem czynności upewnij się czy dane zostały zaimportowane. Jeśli nie: przeczytaj jak to zrobić. Aby poznać sumę cen biletu z385, należy: Strzworzyć poniższą funcję map:
var mapFun = function() {
emit(this.ticket, { count: this.shares, price: this.price });
};
var reduceFun = function(key, emits) {
reducedVal = { count: 0, price: 0 };
for (var i = 0; i < emits.length; i++) {
reducedVal.count += emits[i].count;
reducedVal.price += emits[i].price;
}
return reducedVal;
};
var finalizeFun = function (key, reducedVal) {
reducedVal.avg = reducedVal.price/reducedVal.count;
return reducedVal;
};
mr = db.test.mapReduce(
mapFun,
reduceFun,
{
out: "averagePrices",
finalize: finalizeFun
}
)
db[mr.result].find();
Map-Reduce | Ł. Mielewczyk | M. Białousz |
---|---|---|
Przykładowy rekord | 15616 ms | 16011 ms |
Ilość kluczy | 56238 ms | 57885 ms |
Suma cen jednego biletu | 1382 ms | 1496 ms |
Średnia ilość biletów | 14377 ms | 16355 ms |
Średnia cen sprzedaży | 19599 ms | 21013 ms |
Nazwa | Wartosć | |
---|---|---|
Ł. Mielewczyk | M. Białousz | |
Procesor | Core(TM) i3-4005U CPU 1,7 GHz 1,7 GHz | Intel Core i7-4510U 2.0 GHz |
RAM | 12 GB | 8,0 GB |
Dysk | HDD | Toshiba MQ01ABD025 1TB |
System operacyjny | Windows 10 64-bit | Windows 8.1 x64 |
Wersje mongoDB | mongoDB 3.2.6 | mongoDB 3.2.6 |
Zasoby żużycia - Ł. Mielewczyk
|
Zasoby żużycia - M. Białousz
|
---|