[NBP] 3. domaća zadaća - 2021/2022
prx_xD
MsBrightside
dobijem drugacije brojeve
otvorio sam ticket i kaze mi profesor da mi fali CR (valjda combinable reducer)
iako kada isti kod izvrsim lokano na bazi dobijem rezultate iste kao oni
db.dvdrent.mapReduce(
function () {
if (this.staff.address.country === 'Philippines') {
var st = {
name: this.staff.first_name,
lastname: this.staff.last_name,
};
var cs = {
customer_id: this.customer.customer_id,
country: this.customer.address.country,
};
emit(st, cs);
}
},
function (key, values) {
var res = {
phil: 0,
other: 0
};
var cust_ids = [];
values.forEach(function (value) {
if (!cust_ids.includes(value.customer_id)) {
cust_ids.push(value.customer_id);
if (value.country === 'Philippines') {
res.phil += 1;
} else {
res.other += 1;
}
}
});
return res;
},
{
out: {
inline: 1,
},
}
);
Harweyy
prx_xD Nije bitno je li ti lokalno se izvrsava tocno, stvar je u tome sto npr ima 100 podataka
oni su namjerno namjestili edgar da ti ih 99 dode istovremeno a 100-ti ima delay tipa 200ms, i onda ti upit ne prode za to sto nije compound reduce. Dok lokalno ti ih sve dohvatis istovremeno.
Vrba
Exelero jesi mozda uspio rijesiti ovaj?
prx_xD
Harweyy jel znas mozda sta bih trebao dodati u kodu da se to rjesi
Harweyy
prx_xD nek ti map emitira kao value listu, u reduce konkateniraj listu i nek return je lista i onda u finalize funkciji konzumiraj listu
Yasuke
Moj kod:
db.dvdrent.mapReduce(
`function(){
if(this.film != undefined){
if(this.film.actors != undefined && this.film.categories != undefined){
var filmTitle = this.film.title;
var actorsId = [];
this.film.actors.forEach(function(actor){
actorsId = actorsId.concat(actor.actor_id)
});
this.film.categories.forEach(function(category){
emit(category, {films : [{title:filmTitle, actorsId:actorsId}] });
});
}
}
};`,
`function(key, values){
var rv = {
films : []
}
values.forEach(function(value){
rv.films = rv.films.concat(value.films)
});
return rv;
};`,
{ "finalize" : `function(key, reducedValues){
reducedValues.films = reducedValues.films.filter((item, pos, self) =>
pos === self.findIndex((t) => (
t.title === item.title
))
);
var allActors = [];
reducedValues.films.forEach(function(value){
allActors = allActors.concat(value.actorsId)
});
var uniqueActors = new Set(allActors);
var all = allActors.length;
var unique = uniqueActors.size;
return {"all":all, "unqiue":unique};
};`
}
)
Ako neko ima rješenje zadatka ili može pomoć pronaći grešku pls?
Extended_mix
Bono Ako nisi do sada skuzio, nigdje ne izbacujes filmove krace od 120 min
WP_Deva
Stavili su obavijest
WP_Deva
Je li netko uspio riješiti ova 2?
WP_Deva
IdeGas
jel imo netko u medjuvremenu 🙁
MrPeanutButter
Ima li netko ideju za ovaj zadatak naime kako bih trebao napraviti da value na ovakav naćin ima varijable tj. da su nazivi kategorija ovako ?
"value": {
"Cartoons": {
"count": 10,
"amount": 32.9
},
"Drama": {
"count": 10,
"amount": 48.901
},
"Action": {
"count": 8,
"amount": 38.92
},
Tonii
MrPeanutButter Jesi možda uspio riješiti ja fakat nemam pojma a trebam 1 od ova 3 zadatka riješiti za uvjet iz zadaća
Cubi
Zulul
Možeš dodavati nove ključeve objektu o na sljedeći način: o[“Drama”] = { … }.
Ako ti je string “Drama” spremljen u varijablu v, onda možeš pisati o[v] = { … }. Kasnije možeš iterirati po ključevima s for in petljom ako ti zatreba.
MrPeanutButter
Zulul nop nisam jos
mgd
`db.dvdrent.mapReduce(`
function(){
if(this.payment !== undefined && this.payment !== null && this.payment.date !== undefined && this.payment.payment_date !== null &&
this.film.rating === 'G' && this.film.length > 120){
var film = {title: this.film.title};
emit(film, {posudba: [{rentaldate: new Date(this.rental_date), amount: this.payment.amount}]});
}
}
`, `
function(key, values){
var rv = {posudba: []};
values.forEach(function(film){
rv.posudba = rv.posudba.concat(film.posudba);
});
return rv;
}
`, {
"finalize": `function(key, values){
var value = {rentals: 0,
amount: 0,
days: 0,
amountPerDay: 0};
var listaDatuma = [];
var listaCijena = [];
var min_date = null;
var max_date = null;
values.posudba.forEach(function(p){
listaDatuma.push(p.rentaldate);
listaCijena.push(p.amount);
});
if(listaCijena.length > 0){
value.rentals = listaCijena.length;
for(var i = 0; i < listaCijena.length; i++){
am += listaCijena[i];
}
}
if(listaDatuma.length > 0){
for(var i = 0; i < listaDatuma.length; i++){
var datum = listaDatuma[i];
if( min_date !== null){
if(datum < min_date){
min_date = datum;
}
}else{
min_date = datum;
}
if(max_date !== null){
if(datum > max_date){
max_date = datum;
}
} else{
max_date = datum;
}
}
}
var razlika = Math.round((max_date-min_date)/(1000*60*60*24));
value.days = razlika;
value.amount = Math.round(am * 100) / 100;
value.amountPerDay = Math.round((value.amount/value.days) * 1000) / 1000;
return value;
}`
});`
jel moze pomoc kako da ovo pretvorim u taj CR ?
Tonii
Jel možda netko kuži zašto mi baca ovaj error na cards ali mi na primjer nobelprizes radi normalno
Lusy
I3loodHound Jesi uspio ovaj?
Lusy
Zna netko ovaj?
Eteie
MGJ jesi mozda uspio ovaj?
Lusy
boki8
Harweyy na koji nacin se ovo rjesava?
Tonii
Jel ima netko možda ovaj riješen? Vidim da je netko uploadao file prošle godine ali više ne postoji
Lusy
Eteie nop
kivu
Moze pomoc?
Zasad dobijem ovo
anon00
kivu Prije “finalize” ti fali otvorena zagrada {
Na kraju je vec imas zatvorenu