在mapreduce中读取整个文件

rta7y2nd  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(342)

我的项目是获取大量关于饮食习惯的数据,并使用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函数有关,它将整个文件文本作为一个值而不仅仅是一行的值。
谢谢

7z5jn7bk

7z5jn7bk1#

直接的方法是实现自己的inputformat,您可以从这里得到一个示例。
另一种方法是实现一个单独的mapreduce程序来预处理整个数据。e、 把你想让Map器处理的行数放在一行中,例如,假设你想让Map器处理这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

之后,Map器将分离出线并处理它们。
第二种方法效率很低。

相关问题