2013-03-03 5 views
0

Voici la logique que je suis en train de mettre en œuvre, mais je trouve vraiment difficile de trouver un moyen avec application MongoDB/Node.jsmongodb solution d'agrégation de MapReduce ou de fusion en remplacement

Data: country, state, val1 

Je dois calculer moyenne et std. déviation en utilisant la formule ci-dessous. J'ai vérifié d'autres postes de débordement de la pile, mais la formule std dev que je travaille n'est pas le même:

for each row -> group by country, state 
    mean = sum(val1)/count -> 
for each row -> 
    deviation += Math.pow((val1 - mean), 2) 
for each row -> group by country, state 
    std dev = Math.sqrt(dev/ count) 

le problème est à l'écart moyen doit être calculé. Il me semble que j'ai besoin d'une agrégation pour Mean avant de calculer l'écart/std dev à travers Map réduire ce que je ne trouve pas un moyen de calculer. Quelqu'un pourrait-il suggérer un moyen de faire cela?

Si ce n'est pas possible, avons-nous un moyen d'émettre une instruction de mise à jour dans mongodb similaire à la requête de fusion traditionnelle ci-dessous? Je mettrai à jour la valeur moyenne pour toutes les lignes et invoquerai plus tard Mapreduce pour la deviation/std dev.

merge into Tbl1 a using 
    (select b.country, b.state, sum(b.val1)/count(b.val1) as mean 
    from Tbl1 b 
    group by b.country, b.state) c 
on (a.country = c.country and 
    a.state = c.state) 
when matched 
then update 
     set a.mean = c.mean 

Je suis assez nouveau pour le NoSQL et nodejs et ce serait bien si vous les gars pourrait suggérer une solution/alternative.

Répondre

0

Oui, calculer l'écart-type à l'aide de map-reduce est délicat car vous devez comparer chaque valeur de données à la moyenne dans l'algorithme traditionnel.

Jetez un oeil à cette solution basée sur le calcul parallèle algorithm: https://gist.github.com/RedBeard0531/1886960

+0

Merci encore Johnny! l'algorithme de calcul parallèle et l'échantillon de github produisent juste le même résultat que la logique std dev traditionnelle que je cherchais! – user1549605