MongoDB执行MapReduce获取NaN值

时间:2016-12-04 10:52:41

标签: javascript mongodb csv mapreduce nan

给定股票的数据集,我的任务是在给定一年的数据的情况下,生成每月特定股票的平均表现。 (关键是月份)

对于某些未知的某些月份,其性能平均值会返回NaN值。

我从以下链接的文件中导入我的数据集到mongodb: https://drive.google.com/file/d/0B8ltsj7C_DRLYXltQnBLTTk2Mk0/view?usp=sharing

导入后,我运行我的mapreduce算法并使用检查结果 db.BR.report.find()

这是我的mapreduce代码:

// mongoimport --host=127.0.0.1 -d contempoFinal -c BR --type csv --file /Users/eddrichjanzzenang/Desktop/BR.csv --headerline


var map = function(){

    var date = this.Date.substring(5,7);
    var p = ((this.Close - this.Open)/ this.Close) * 100;


    emit({date: date}, {p:p})

}



var reduce = function(key, values){

    var total = 0; 

    for(var i = 0; i < values.length; i++){
        total += values[i].p;
    }


    if(values.length != 0){
        total = total/values.length;
    }

    return {ave:total}

    // return {values:values}

}


db.runCommand({
    mapReduce: "BR",
    map: map,
    reduce: reduce,
    out: "BR.reports"
})


// ------------------------------------------------------------------------------------------------------------
// --------------------------------------This is the cause of the error ---------------------------------------
// ------------------------------------------------------------------------------------------------------------
// ------------------------------------------------------------------------------------------------------------

// return {values:values} instead of return {ave:total} in the reduce function

//run the ff command: db.BR.reports.find().pretty()

// As you can see, another values array has been added inside the original values array.


//  "_id" : {
//  "date" : "08"
// },
// "value" : {
//  "values" : [
//      {
//          "values" : [
//              {
//                  "p" : -2.078157439320257
//              },
//              {
//                  "p" : -0.5431533054662951
//              },
//              {
//                  "p" : 0.9795132377415724
//              },
//              {
//                  "p" : -3.9067422810333916
//              },
//              {
//                  "p" : 0.1845049200491997
//              },
//              {
//                  "p" : 7.313954241902089
//              },
//              {
//                  "p" : -1.964815364505311
//              },
//              {
//                  "p" : -1.973890069845128
//              },
//              {
//                  "p" : -1.3640210674629443
//              },
//              {
//                  "p" : -0.3878227361674579
//              },
//              {
//                  "p" : -0.25217148366968656
//              },
//              {
//                  "p" : 1.1589458521552969
//              },
//              {
//                  "p" : 2.3657055385471732
//              },
//              {
//                  "p" : 0.5798810913377168
//              },
//              {
//                  "p" : -1.9705884532497502
//              }
//          ]
//      },
//      {
//          "p" : 0.7537092460991003
//      },
//      {
//          "p" : 0.40904829064892917
//      },
//      {
//          "p" : -0.18791946308724908
//      },
//      {
//          "p" : -2.4136067584642555
//      },
//      {
//          "p" : 1.373917062874929
//      },
//      {
//          "p" : 0.05451349290034214
//      }
//  ]
// }

您可能会推荐任何解决方案吗?我非常感谢有关此事的任何意见。非常感谢你!

0 个答案:

没有答案