所以我只是在做一些hadoop的训练来学习这个领域,我正在尝试做一个reduce-side-join,除了第二类之外,我还有其他功能。
所以最基本的是:
两个文件
一个人有球员、球队、薪水
另一个有球员,球队,本垒打
输出应该是团队,球员,薪水,本垒打
纽约大都会队应该被划分成一个文件,而所有其他糟糕的球队应该放在另一个文件。
这些文件中的每一个都应该按球队排序,其次是按球员工资排序。
我正在使用一个球队的关键,playerid加入,这是有效的,但我不知道我该如何排序的工资,因为只有一个两个文件有它。
这是一个可能的任务,还是只能通过Map端连接来完成?
1条答案
按热度按时间aoyhnmkz1#
为此,“纽约大都会队应该被划分成一个文件,而所有其他糟糕的球队应该放在另一个。”
您可以使用自定义分区器,并为纽约大都会返回0,为其他人返回1。
关于薪资排序,你说得对-使用map-side-join是有效的。如果数据集不是很大,可以通过在reducer输入上循环两次来对reducer进行排序。在第一个循环中,您必须构建一些内存中的集合来存储排序后的数据,在第二个循环中,您可以发出数据。但是它在更大的数据集上是非常低效的-特别是如果团队中的每个人都有太多的玩家,它会很慢并且会遇到内存不足的问题。