如何映射Mapper

时间:2017-09-06 03:29:53

标签: hadoop mapreduce

我有一个包含

等数据的文件
City,Quarter,Classification,Index
Bordeux,Q1,R,3 
Krakow,Q1,U,2 
Halifax,Q1,U,4

我需要找出每个分类中最高的索引,并将它们写入两个单独的文件。输出应为

Bordeux,Q1,R,3
Halifax,Q1,U,4

如何加载Mapper中的数据,因为它需要键/值对。在mapper中,程序员似乎不应对数据进行任何修改。那么,如何在Context对象中加载它。

我认为Reducer中的键或值的数据类型没有改变。如果是这样,我将使用我的逻辑来查找最高记录,然后如何组织到那里的上下文对象。

我不知道如何继续。

必要的指示将帮助我继续前进。

1 个答案:

答案 0 :(得分:0)

在您使用Mapper读取文件的情况下,输入键是行的ObjectId,值是行本身。换句话说,在文件的每一行都将在Mapper中作为值字段接收。现在,Mapper的输出(键,值)应该是(分类,索引)。 Mapper的输出将成为reducer的输入(键,值)。因此reducer将接收(Classification,Iterable)作为输入。因此,对于每个分类,您可以迭代索引列表以获得最大值并且减速器的输出将是(分类,最大值)

在这种情况下,Mapper和Reducer的输出键和值类型相同。

但是,关于将其写入单独的行:仅当每个键都路由到不同的reducer实例时,才会生成单独的文件。因此,在您的情况下,减速器的总数应该等于唯一分类的总数(尽管资源利用率不是很好)。因此,您必须编写自定义分区程序才能实现它