Mapreduce CouchDB-重新处理视图结果

Mapreduce CouchDB-重新处理视图结果,mapreduce,couchdb,Mapreduce,Couchdb,我决定今天试用CouchDB,在这里使用~9GB的Amazon Review数据: 我想做的是找到最没有帮助的用户。那些写了最多评论的人,而其他人却认为这些评论没有帮助(他们是亚马逊最伟大的巨魔吗?还是只是不讨人喜欢?我想看看) 我已经编写了一个map函数来查找所有用户的userID,这些用户的帮助性评级差异超过5,然后编写了一个reduce函数来求和,以找出它们出现的频率 // map function: function(doc){ var unhelpfulness = doc.he

我决定今天试用CouchDB,在这里使用~9GB的Amazon Review数据:

我想做的是找到最没有帮助的用户。那些写了最多评论的人,而其他人却认为这些评论没有帮助(他们是亚马逊最伟大的巨魔吗?还是只是不讨人喜欢?我想看看)

我已经编写了一个map函数来查找所有用户的userID,这些用户的帮助性评级差异超过5,然后编写了一个reduce函数来求和,以找出它们出现的频率

// map function:
function(doc){
  var unhelpfulness = doc.helpfulness[1] - doc.helpfulness[0]   
  if(unhelpfulness > 5){
    emit(doc.userId, 1);
  }
}

// reduce function:
function(keys, values){
  return sum(values);
}
这给了我一个userId的视图:无用评论的数量


我想获取这个输出,然后用更多的map reduce重新处理它,以找出谁写了最没有帮助的评论。我该怎么做?我可以将视图导出为另一个表或其他内容吗?还是我只是用错误的方式思考这个问题?

你的思路是对的。coach db不允许按值对结果进行排序,但它有一个list函数,可用于对视图的结果执行操作。从

正如show函数将文档转换为任意输出格式一样,CouchDB列表函数允许您以任何格式呈现视图查询的输出。强大的迭代器API允许灵活地动态过滤和聚合行,以及输出原始转换,以便轻松制作Atom提要、HTML列表、CSV文件、配置文件,甚至修改JSON

因此,我们将使用列表进行筛选和聚合。在您的设计文档中创建一个列表函数,如下所示

function(head, req) 
{

var row; var rows=[]; 

while(row=getRow()){rows.push(row); } 

rows.sort(function(a,b){return b.value -a.value}); 

send(JSON.stringify(rows[0]));  
}
现在如果你问

/your database/\u design/your design doc name/your list name/your view name?group=true

你应该有最没有帮助的人的名字。沙发db让找到巨魔变得很容易:)