我有多个文件,其中包含员工的姓名,id和技能集和另一个文件“skills.txt”,其中包含一些特定技能的列表。我正在尝试编写一个java mapreduce程序来找出拥有skills.txt中提到的技能的员工。
e、 g.假设有3个员工档案,如下所示:
emp1.txt文件-
姓名:汤姆
员工编号:001
技能:c++,java,sql
emp2.txt文件-
姓名:杰瑞
员工编号:002
技能:c++,php,sql
emp3.txt文件-
姓名:杰克
员工编号:002
技能:java、php
技能.txt-
PHP
sql语句
那么我的结果应该如下。
php-002;千斤顶-003
sql tom-001;杰瑞-002
所有这四个文件都在我的hdfs中。我对hadoop和mapreduce非常陌生。。我已经为此奋斗了很多,但没有得到任何适当的逻辑去做。我能够写程序,如果只有一个技能,我得到的技能需要搜索作为参数mapreduce程序。但我不能做的时候,有多个技能是要搜索和技能的文件格式与其他员工的档案。
2条答案
按热度按时间wsxa1bj11#
解决方案是将skills.txt文件添加到distributedcache中。在Map器中,使用setup()函数读取文件,然后:
在作业设置过程中,必须将文件添加到分布式缓存:
我希望这能让你上路。。
brccelvz2#
如果您的技能列表如此之短,您可以通过配置将其传递给Map器,在Map器中读回并将其与输入匹配。为什么只为两个条目创建一个单独的文件?嗯,这样会更方便。像这样:
在你的司机身上-
在Map绘制器中-
但是,如果列表非常大,最好使用dist.cache。