我想在多个文件(实际上是2个文件)上使用Hadoop作为输入文件。
例如:
文件输入1:
user1 italy
user2 spain
user3 italy
...
文件输入2:
user1 trackname1
user2 trackname2
user3 trackname1
...
我需要每个国家/地区的用户数量,然后是每个国家/地区最受欢迎的曲目(文件2)。最后是最流行音乐的出现次数。
我想要输出,例如:
Popular track (italy):
trackname1 (occurrences)
Popular track (spain):
trackname2
...
实际上我试过使用2个映射器和1个减速器。但我不知道如何在用户字段上的两个输入文件之间进行“连接”。什么是最好的解决方案?
有什么建议吗?
谢谢!
答案 0 :(得分:1)
我认为你需要连续三个工作岗位(也许我会使用太多工作,但这会给你直觉,你可以稍后优化它):
作业1 (加入)
file1的地图
输出键:用户ID
输出值:country(您可以设置一个特殊的前缀来表示它是一个国家而不是一个曲目)
file2的地图
输出键:用户ID
输出值:track
缩小(用户ID,< country,track>)
输出键 :(国家/地区)
输出值:1
工作2 (计算)
作业2和3可以使用与其缩减器类似(但不完全相同)的组合器。我再说一遍,这不是最好的解决方案,可以做很多工作来优化它(特别是工作2和3)。例如,您可以从作业1输出一个国家/地区作为键,将(轨道,1)作为值输出,然后在作业2处完成。