Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用MapReduce或其他分布式计算方法进行分析计算?_Map_Mapreduce_Distributed Computing_Reduce - Fatal编程技术网

使用MapReduce或其他分布式计算方法进行分析计算?

使用MapReduce或其他分布式计算方法进行分析计算?,map,mapreduce,distributed-computing,reduce,Map,Mapreduce,Distributed Computing,Reduce,假设我有三个基本模型:用户、公司和访问。每次用户访问公司时,都会以这种格式记录一次访问(用户id、公司id、访问日期) 我希望能够计算出一家公司的平均访问间隔时间。不是总的访问量,而是他们的客户在返回商店之前平均等待的时间 例如,如果一个用户在星期二、星期三和星期五访问,则一个“间隔”为一天,一个“间隔”为两天=>(1,2)。如果另一个用户在星期一和星期五访问,则间隔为4天=>(4)。如果第三个用户只访问过一次,则不应考虑他。该公司用户访问的平均间隔时间为(1+2+4)/3=2.333天 如果我

假设我有三个基本模型:用户、公司和访问。每次用户访问公司时,都会以这种格式记录一次访问
(用户id、公司id、访问日期)

我希望能够计算出一家公司的平均访问间隔时间。不是总的访问量,而是他们的客户在返回商店之前平均等待的时间

例如,如果一个用户在星期二、星期三和星期五访问,则一个“间隔”为一天,一个“间隔”为两天=>(1,2)。如果另一个用户在星期一和星期五访问,则间隔为4天=>(4)。如果第三个用户只访问过一次,则不应考虑他。该公司用户访问的平均间隔时间为(1+2+4)/3=2.333天


如果我有成千上万的用户、用户和公司,我想为每家公司计算一个数字,我应该怎么做?我以前只做过基本的MapReduce应用程序,我不知道我的Map和Reduce步骤是什么。有人能帮我找出伪代码中的MapReduce吗?或者是否有其他我可以合理执行的分布式计算方法?作为记录,我希望每晚在数据库上执行此操作。

过于简单的方法是有两个作业步骤

第一个作业步骤有一个映射器,以“公司:用户”和“访问日期”的形式写入关键值。在上面的示例中,映射器将编写如下内容:

"user1:companyA" -> "2012/07/16"
"user1:comapnyA" -> "2012/07/17"
"user1:comapnyA" -> "2012/07/19"
"user2:comapnyA" -> "2012/07/15"
"user2:comapnyA" -> "2012/07/19"
...
这意味着对reducer的每次调用都会将单个用户的所有访问传递给单个公司。这意味着一个对reducer的调用将传入:

"user1:companyA" -> {2012/07/16, 2012/07/17, 2012/07/19}
另一个电话将传入:

"user2:companyA" -> {2012/07/15, 2012/07/19}
我假设这组日期(作为一个Iterable值传入)很容易管理,因为您可以对其进行排序,找出差距,并以“company”和“gap”的形式为每个差距编写一个键值对记录。例如,通过时:

"user1:companyA" -> {2012/07/16, 2012/07/17, 2012/07/19}
第一个作业的缩减器将写入上下文:

"companyA" -> 1
"compnayA" -> 2
第二个作业有一个传递映射器,它只将公司/差距信息传递给减速器。每次调用reducer都会为特定公司提供一个可计算的差距值。遍历数据以生成平均值,并以“company”和“average_gap”的形式写入键值对


如果原始访问集太大,我们可以讨论让hadoop使用一些自定义比较器为您进行排序。

我对您使用“间隙”所做的操作感到有点困惑,您能详细说明吗?间隙是您定义的:用户连续两次访问公司之间的时间差。我会再编辑一些答案