Map Reduce算法设计(首选mongodb)

Map Reduce算法设计(首选mongodb),mongodb,mapreduce,Mongodb,Mapreduce,我对地图还原设计很陌生。我使用mongodb作为后端和MapReduce引擎 在一个简单的数据集上,如: day, value 当值为-1、0或1时,我希望向每行添加持续时间,其中持续时间是值等于1或-1的连续天数 输入数据集示例: day| value 2012-01-01| 1 2012-01-02| 1 2012-01-03| 1 2012-01-04| -1 2012-01-05| -1 2012-01-06| 0 2012-01-07| 1 2012-01-0

我对地图还原设计很陌生。我使用mongodb作为后端和MapReduce引擎

在一个简单的数据集上,如:

day, value
当值为-1、0或1时,我希望向每行添加持续时间,其中持续时间是值等于1或-1的连续天数

输入数据集示例:

       day| value
2012-01-01|  1
2012-01-02|  1
2012-01-03|  1
2012-01-04| -1
2012-01-05| -1
2012-01-06|  0
2012-01-07|  1
2012-01-08|  1
输出应为:

       day| value | Duration
2012-01-01|  1    | 0
2012-01-02|  1    | 1
2012-01-03|  1    | 2
2012-01-04| -1    | 0
2012-01-05| -1    |-1
2012-01-06|  0    | 0
2012-01-07|  1    | 0
2012-01-08|  1    | 1

这在MapReduce工作中可行吗?

如果我错了,有人会纠正我,但这在MapReduce中似乎不可行。我不确定MongoDB如何处理其映射程序输入的分区,但如果我没记错的话,MapReduce不可能执行依赖于先前对映射程序块之外的数据的了解的任务

MR有可能在一定范围内完成这项工作。假设01/01至01/02天发送给一个映射器(来自您的示例)。当然,您可以让它意识到这两天连续具有相同的值

但是,如果另一个地图绘制者获得01/03到01/04天的时间怎么办?此映射程序不知道它之前的第1天和第2天与第3天的值相同,因此它只输出其持续时间为0。据我所知,没有办法从不同的地图绘制者那里获得数据


使用直接的java编码可能会更好

如果我错了,有人会纠正我,但这对于MapReduce来说似乎不可行。我不确定MongoDB如何处理其映射程序输入的分区,但如果我没记错的话,MapReduce不可能执行依赖于先前对映射程序块之外的数据的了解的任务

MR有可能在一定范围内完成这项工作。假设01/01至01/02天发送给一个映射器(来自您的示例)。当然,您可以让它意识到这两天连续具有相同的值

但是,如果另一个地图绘制者获得01/03到01/04天的时间怎么办?此映射程序不知道它之前的第1天和第2天与第3天的值相同,因此它只输出其持续时间为0。据我所知,没有办法从不同的地图绘制者那里获得数据


使用直接的java编码可能会更好

谢谢,就像你说的那样,如果我用一个最大值(例如3天)限制持续时间,我每天排放3个值(效率低,但至少是分布的)。现在我将按照你的建议进行一次很好的旧迭代。谢谢,就像你说的那样,如果我用一个最大值(例如3天)限制持续时间,我每天会发出3个值(效率低,但至少是分布式的)。现在,我将按照您的建议,进行一次良好的旧迭代。