Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/react-native/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何基于键名设置输出文件?_Java_Hadoop - Fatal编程技术网

Java 如何基于键名设置输出文件?

Java 如何基于键名设置输出文件?,java,hadoop,Java,Hadoop,如何根据键名设置输出文件 例如,以mapreduce中流行的WordCount示例为例。如果我给它一个具有正确语法的任意文件,它应该找到键(单词)及其出现频率。如何获得输出,其中每个键都是文件名,文件中是值 (我这样问是因为我目前的理解是,multipleoutput仍然需要指定要使用的特定文件名) 使用hadoop 0.20.205.0 (还有人能给我指出一些关于这个hadoop版本的好教程吗?如果你想基于不同的键向多个文件写入值,只需使用键(Strings,我想)构造文件名并以通常的方式创建

如何根据键名设置输出文件

例如,以mapreduce中流行的WordCount示例为例。如果我给它一个具有正确语法的任意文件,它应该找到键(单词)及其出现频率。如何获得输出,其中每个键都是文件名,文件中是值

(我这样问是因为我目前的理解是,multipleoutput仍然需要指定要使用的特定文件名)

使用hadoop 0.20.205.0


(还有人能给我指出一些关于这个hadoop版本的好教程吗?

如果你想基于不同的键向多个文件写入值,只需使用键(
String
s,我想)构造文件名并以通常的方式创建文件,例如。,使用。

在初始化作业时,不需要在任何位置预先分离文件名

使用减速机上的这个-

void write(K key, V value, String baseOutputPath);
baseOutputPath可以是键的字符串表示形式

e、 g.
void write(K键、V值、getFileName(键))

请看一下链接中的例子,你会明白的

此外,您不需要从reducer中使用
context.write()
。而是使用 仅限多输出'
write()
函数

在我看来,这让一切都充满活力,如果这是你想要的

注释(评论后):

因为,你说你不能使用multipleoutput,这是你可以实际使用的另一种方法 那个

  • 由于reduce函数只处理一个键,因此您可以使用Hadoop在HDFS中创建一个文件(使用您的键名),而不是执行context.write(key,value)
  • 比如:

     FileSystem fs = file.getFileSystem(context.getConfiguration());
     FSDataOutputStream fileOut = fs.create(key.toString());
    
  • 函数将返回一个FSDataOutputStream对象。使用write()函数写入文件

  • 完成后关闭文件系统对象。 类似于-
    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());