在地图减少期间仅添加不同的数字

时间:2016-05-25 08:17:03

标签: javascript mongodb mapreduce bigdata

我有一个csv,关于哪个号码叫哪个号码和通话详情(持续时间和时间等)

我希望将所有数字都设置为数组中的特定数字。 该数组应该是一个文档数组,因此,在每个文档中我也可以拥有所有的调用详细信息。 所以最后我需要一个带有"来电者的文件"号码和"叫" array(该数组如上所定义)。

为此我提出了一个地图缩减解决方案。(非常基本和直观)。 但我的问题是,我只需要一个不同的数字,一个"来电"号码已经打电话。

我当前的mapreduce脚本重复拨打的号码。 我怎样才能在减少阶段考虑唯一数字? 我的代码如下所示:(我在mongo shell中输入)

$ awk '/^INSERT/' data > newfilename
$ cat newfilename 
INSERT a=1 , b=2;
INSERT a=2 , b=10;

据我所知,map和reduce函数是java脚本函数。 所以即使是javascript编码器也可以帮助我(创建reduce函数)。

1 个答案:

答案 0 :(得分:0)

试试这个。

db.contacts.mapReduce(function(){
     emit(this.<<caller_number>>, {called:this.<<called_number>>, callDuration:this.<<callDuration>>,...});}
    ,function(key,values)
      {
      var map = {};
      var called=values.filter(function removeDuplicated(it){
          if (!map[it.called]){
              map[it.called] = 1;
              return true;
          }
          return false;
      })
      return {caller:key, called:called};},
    {"query": {},"out":"new_collection"})