如何基于键名设置输出文件?例如,以mapreduce中流行的wordcount为例。如果我给它一个具有正确语法的任意文件,它应该找到键(单词)和它们出现的频率。如何得到一个输出,其中每个键是文件名,文件中是值?(我这样问是因为我目前的理解是,multipleoutputs仍然需要指定要使用的特定文件名)使用hadoop 0.20.205.0(还有人能给我介绍一些关于这个hadoop版本的好教程吗?)
pgccezyw1#
在多输出中使用此函数,初始化作业时无需在任何位置预先分隔文件名。用减速机上的这个-
void write(K key, V value, String baseOutputPath);
baseoutputpath可以是键的字符串表示形式。例如。 void write(K key, V value, getFileName(key)) ```getFileName(K key){return (key.toString());}
void write(K key, V value, getFileName(key))
请看链接中的例子,你会明白的。此外,您不需要使用 `context.write()` 从减速器上拆下。而是使用倍数输出 `write()` 只起作用。在我看来,这让一切都充满活力,如果你想的话。注解(注解后):既然你说你不能使用乘法输出,那就是另一种方法。由于reduce函数只处理一个键,因此可以使用hadoop文件系统api在hdfs中创建一个文件(使用您的键名),而不是执行context.write(key,value)。比如:
请看链接中的例子,你会明白的。
此外,您不需要使用 `context.write()` 从减速器上拆下。而是使用倍数输出 `write()` 只起作用。
在我看来,这让一切都充满活力,如果你想的话。
注解(注解后):
既然你说你不能使用乘法输出,那就是另一种方法。
由于reduce函数只处理一个键,因此可以使用hadoop文件系统api在hdfs中创建一个文件(使用您的键名),而不是执行context.write(key,value)。
比如:
FileSystem fs = file.getFileSystem(context.getConfiguration());FSDataOutputStream fileOut = fs.create(key.toString());
create()函数将返回一个fsdataoutputstream对象。使用write()函数写入文件。完成后关闭文件系统对象。类似于- `fs.close();`
create()函数将返回一个fsdataoutputstream对象。使用write()函数写入文件。
完成后关闭文件系统对象。类似于- `fs.close();`
csga3l582#
如果要基于不同的键将值写入多个文件,只需使用键即可( String s、 我假设)以通常的方式构造文件名并创建文件,例如使用filewriter。
String
2条答案
按热度按时间pgccezyw1#
在多输出中使用此函数,初始化作业时无需在任何位置预先分隔文件名。
用减速机上的这个-
baseoutputpath可以是键的字符串表示形式。
例如。
void write(K key, V value, getFileName(key))
```getFileName(K key){
return (key.toString());
}
FileSystem fs = file.getFileSystem(context.getConfiguration());
FSDataOutputStream fileOut = fs.create(key.toString());
csga3l582#
如果要基于不同的键将值写入多个文件,只需使用键即可(
String
s、 我假设)以通常的方式构造文件名并创建文件,例如使用filewriter。