Map Reduce算法设计(首选mongodb)
我对地图还原设计很陌生。我使用mongodb作为后端和MapReduce引擎 在一个简单的数据集上,如: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
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个值(效率低,但至少是分布式的)。现在,我将按照您的建议,进行一次良好的旧迭代。