示例代码在这里http://wiki.apache.org/hadoop/wordcount
我理解这个逻辑,但是我注意到在main函数中,它只指定了输入和输出路径,但是它从来没有指定什么是键和值。
map和reduce函数如何解决这个问题?
public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException
public void reduce(Text key, Iterable<IntWritable> values, Context context)
2条答案
按热度按时间o3imoua41#
既然您了解Map器和reducer的格式是key1、value1、key2、value2,并且key1和value1是输入键值类型,key2和value2是输出类型,那么我将解释其余的内容。
在main函数中,你会看到一行,上面写着,
现在,这决定了如何读取输入文件。如果你看看
TextInputFormat
您将看到(在第41行中)它使用LineRecordReader
(source)将文件分解为键值对。在这里,行偏移被设置为键,行本身被设置为值。但就像你说的,这不是自动完成的。您可以通过编写自己的自定义输入格式和记录读取器类来控制此行为。
希望这能消除你的疑虑。
a64a0gku2#
的接口
Mapper
以及Reducer
类在map
以及reduce
功能:和
它们都是这种形式
K1, V1, K2, V2
哪里K1, V1
是输入键值类型和K2, V2
是输出类型。