Java 如何基于键名设置输出文件?
如何根据键名设置输出文件 例如,以mapreduce中流行的WordCount示例为例。如果我给它一个具有正确语法的任意文件,它应该找到键(单词)及其出现频率。如何获得输出,其中每个键都是文件名,文件中是值 (我这样问是因为我目前的理解是,multipleoutput仍然需要指定要使用的特定文件名) 使用hadoop 0.20.205.0Java 如何基于键名设置输出文件?,java,hadoop,Java,Hadoop,如何根据键名设置输出文件 例如,以mapreduce中流行的WordCount示例为例。如果我给它一个具有正确语法的任意文件,它应该找到键(单词)及其出现频率。如何获得输出,其中每个键都是文件名,文件中是值 (我这样问是因为我目前的理解是,multipleoutput仍然需要指定要使用的特定文件名) 使用hadoop 0.20.205.0 (还有人能给我指出一些关于这个hadoop版本的好教程吗?如果你想基于不同的键向多个文件写入值,只需使用键(Strings,我想)构造文件名并以通常的方式创建
(还有人能给我指出一些关于这个hadoop版本的好教程吗?如果你想基于不同的键向多个文件写入值,只需使用键(
String
s,我想)构造文件名并以通常的方式创建文件,例如。,使用。在初始化作业时,不需要在任何位置预先分离文件名
使用减速机上的这个-
void write(K key, V value, String baseOutputPath);
baseOutputPath可以是键的字符串表示形式
e、 g.void write(K键、V值、getFileName(键))
请看一下链接中的例子,你会明白的
此外,您不需要从reducer中使用context.write()
。而是使用
仅限多输出'write()
函数
在我看来,这让一切都充满活力,如果这是你想要的
注释(评论后):
因为,你说你不能使用multipleoutput,这是你可以实际使用的另一种方法
那个
FileSystem fs = file.getFileSystem(context.getConfiguration());
FSDataOutputStream fileOut = fs.create(key.toString());
fs.close()代码>
请每个帖子问一个问题。啊,这样hadoop的输出就不必总是我想要的结果文件了?我可以用filewriter来写吗?令人惊叹的。那么hadoop的输出有什么意义呢?不管怎样,还是要得到减速器中的路径?我不认为我可以在0.20.205中使用它。0@Julian:我已经相应地更新了我的答案,如果您不打算自己创建一个multipleoutput,那么它应该支持Hadoop 0.20.205。
FileSystem fs = file.getFileSystem(context.getConfiguration());
FSDataOutputStream fileOut = fs.create(key.toString());