如何基于键名设置输出文件?
例如,以mapreduce中流行的WordCount示例为例。如果我给它一个具有正确语法的任意文件,它应该找到键(单词)及其出现的频率。如何获得每个键是文件名而文件内部是值的输出?
(我问,因为我目前的理解是MultipleOutputs仍然需要指定要使用的特定文件名)
使用Hadoop 0.20.205.0
(还可以有人给我指出这个Hadoop版本的一些很好的教程吗?)
最佳答案
在this function中使用MultipleOutputs,在初始化作业时,您无需在任何地方预先指定文件名。
在 reducer 上使用它-
void write(K key, V value, String baseOutputPath);
baseOutputPath可以是键的字符串表示形式。
例如
void write(K key, V value, getFileName(key))
getFileName(K key){
return (key.toString());
}
请看一下链接中的示例,您将得到想法。
而且,您不需要使用reducer的
context.write()
。而是使用仅MultipleOuputs的
write()
函数。在我看来,这就是一切的动力,如果那是您想要的。
注意(注释后):
因为您说过不能使用MultipleOutputs,所以这实际上是另一种方法
那。
就像是:
FileSystem fs = file.getFileSystem(context.getConfiguration());
FSDataOutputStream fileOut = fs.create(key.toString());
像-
fs.close();
关于java - 如何根据键名设置输出文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17983550/