我有一个文件,里面有
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条答案
按热度按时间8nuwlpux1#
在您的例子中,当您在mapper中读取文件时,输入键是行的objectid,值是行本身。所以换句话说,在文件的每一行中都会收到mapper中作为值的字段。现在,mapper的输出(key,value)应该是(classification,index)。mapper的输出将成为reducer的输入(key,value)。所以reducer将接收(分类,iterable)作为输入。因此,对于每个分类,您可以迭代索引列表以获得最大值,并且reducer的输出将是(classification,max)
在这种情况下,mapper和reducer的输出键和值类型将是相同的。
但是,关于将其写入单独的行:仅当每个键路由到不同的reducer示例时,才会生成单独的文件。所以在您的例子中,reducer的总数应该等于惟一分类的总数(尽管在资源利用率方面不是很好)。因此,您必须编写一个自定义分区器来实现它