【问题标题】:Adding only Distinct numbers during map reduce在地图减少期间仅添加不同的数字
【发布时间】:2016-05-25 08:17:02
【问题描述】:

我有一个关于哪个号码呼叫哪个号码和呼叫详细信息(持续时间和时间等)的 csv

我想将所有数字都称为数组中的特定数字。 该数组应该是一个文档数组,因此在每个文档中我也可以拥有所有调用详细信息。 所以最后我需要带有“调用者”号码和“被调用”数组的文档(该数组如上定义)。

为此,我想出了一个减少地图的解决方案。(非常基本和直观)。 但我的问题是我只需要“呼叫者”号码呼叫的不同号码。

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

db.contacts.mapReduce(
  function(){
    numbers = [];
    value={phone:this.<<called_number>>};
    numbers.push(value);
    emit(this.<<caller_number>>,{called:numbers});
  },
  function(key,values) {
    result={called:[]};
    values.forEach(function (v) {
      var i,j;
      for(i=0;i<v.called.length;i++) {
        var flag=0;
        for(j=0;j<result.called.length;j++) {
          if(v.called[i].phone==result.called[j].phone){
            flag=1;
          }
        }
        if(flag==0) {
          result.called.push(v.called[i])
        }
      }
    });
    return result;
  },
  {"query": {},"out":"new_collection"}
)

我了解 map 和 reduce 函数是 java 脚本函数。 所以即使是 javascript 编码人员也可以在这里帮助我(创建 reduce 函数)。

【问题讨论】:

  • 试试 mongobooster.com,一个 MongoDB GUI。您至少应该在编辑器中格式化您的代码。太难读了。
  • 现在怎么样?请帮帮我
  • 你想做什么?获取同一来电者的所有被叫号码?
  • 我想要'a'来电号码的所有被叫号码

标签: javascript mongodb mapreduce bigdata


【解决方案1】:

试试这个。

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"})

【讨论】:

  • 这不是我想要的。运行上述代码后的示例文档是这样的: ```` { "_id" : NumberLong("99635*****") , "value" : { "caller" : NumberLong("99635**** *"), " called" : [ NumberLong("96183*****"), NumberLong("88971*****") ] } } 我想要的是被调用的数组是一个文档数组.. ...(这里是数字数组)....数组中的每个元素都应该是一个文档,因为该文档应该包含通话详细信息,例如通话时长、通话时间...等
猜你喜欢
  • 1970-01-01
  • 2018-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-27
  • 1970-01-01
  • 2015-10-14
相关资源
最近更新 更多