我的项目是获取大量关于饮食习惯的数据,并使用mapreduce(我计划使用两种不同的mapreduce)找出与给定感觉相关的前五种食物。示例输入文件如下所示:
food parsnips 2017/1/24 7:00
food beef 2017/1/24 9:00
food oats 2017/1/24 12:00
feel sleepy 2017/1/24 16:00
food pineapple 2017/1/24 17:00
food squid 2017/1/25 7:00
feel sleepy 2017/1/25 11:00
food blueberries 2017/1/25 12:00
food plums 2017/1/25 14:00
feel headache 2017/1/25 18:00
food broccoli 2017/1/25 19:00
food strawberries 2017/1/26 6:00
feel tired 2017/1/26 6:00
food oats 2017/1/26 7:00
food celery 2017/1/26 8:00
food lobster 2017/1/26 9:00
food wings 2017/1/26 9:00
feel stomachache 2017/1/26 14:00
food fish 2017/1/26 16:00
food rice 2017/1/27 6:00
food barley 2017/1/27 11:00
food wings 2017/1/27 17:00
feel itchy 2017/1/27 18:00
food mustard 2017/1/27 19:00
food icecream 2017/1/28 6:00
feel sleepy 2017/1/28 6:00
food oats 2017/1/28 10:00
feel stomachache 2017/1/28 10:00
food grapes 2017/1/28 13:00
food cheese 2017/1/28 14:00
food bread 2017/1/28 15:00
feel itchy 2017/1/28 17:00
给定的食物在吃了十二个小时后会有一种感觉。例如:在第一行,欧防风会有“困倦”的感觉,因为睡眠的感觉发生在欧防风被吃掉后9小时。如果“困倦”发生在18:00,那么防风草不会与困倦联系在一起。像这样的输入文件有很多。
这是我的项目计划:
第一个mapreduce将读入文件并创建(key,value)对,其中key是“food,feeling”,value只是“one”。换句话说,它将创建一对,其中key是任何时候食物与感觉相关的。reduce将像字数统计一样,将给定的“食物,感觉”在所有输入中出现的所有时间相加。
第二个mapreduce将“food feeling,sum”作为它的(key,value)对。然后,它将把每种感觉与引起它的所有食物对应起来,产生一个“‘感觉,食物’,x次”的(键值)。然后,它将把一种感觉的前五种食物的因果关系减少到一个输出中,产生以下输出:
“感觉1:food1,x事件”
“感觉1:食物2,x事件”
我的问题是我不知道如何设置第一个mapreduce函数。我已经阅读了大量关于mapreduce的文献,并熟悉了常见的maxtemp和wordcount示例,但我的问题是,我不知道如何利用12小时的窗口和使用输入文件来创建“food feeling,1”键值对。任何建议都是有用的。我知道这与map函数有关,它将整个文件文本作为一个值而不仅仅是一行的值。
谢谢
1条答案
按热度按时间7z5jn7bk1#
直接的方法是实现自己的inputformat,您可以从这里得到一个示例。
另一种方法是实现一个单独的mapreduce程序来预处理整个数据。e、 把你想让Map器处理的行数放在一行中,例如,假设你想让Map器处理这5行,那么就这样做
类似的事情:
之后,Map器将分离出线并处理它们。
第二种方法效率很低。