我的项目是获取大量关于饮食习惯的数据,并使用MapReduce (我计划使用两种不同的MapReduces)来找出五大类食物与特定感觉相关的原因。示例输入文件如下:
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一种给定的食物会在食物被吃掉后12小时内与一种感觉联系在一起。例如:在第一行中,作为一种与之相关的感觉,欧洲剪贴器会有一种“困倦”的感觉,因为这种睡眠感觉发生在吃完欧洲防风的9个小时之后。如果这种“困倦”发生在18:00,那么欧洲小片段就不会与睡意联系在一起。有许多类似于此的输入文件。
这是我对这个项目的计划:
Feeling1: food1,x事件
Feeling1: food2,x事件
我的问题是我不知道如何设置第一个MapReduce函数。我已经阅读了很多关于MapReduce的文献,并熟悉了常见的MaxTemp和WordCount示例,但我的问题是,我不知道如何使用12小时窗口并使用输入文件来创建“美食感觉,1”键值对。任何建议都是有用的。我知道这与map函数有关,它将整个文件文本作为一个值,而不仅仅是单个行的值。
谢谢
发布于 2017-05-15 06:59:45
直接的方法是实现您自己的InputFormat,您可以从这里获得一个示例。
另一方面,实现一个单独的MapReduce程序来预处理整个数据.例如,将您想要的行数放到映射器中,应该在一行中处理,例如,假设您想通过一个映射程序处理这5行,然后执行以下操作
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 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在此之后,映射器将分离出行并处理它们。
第二种方法效率很低。
https://stackoverflow.com/questions/43900873
复制相似问题