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

llycmphe  于 2021-06-03  发布在  Hadoop
关注(0)|答案(2)|浏览(319)

如何基于键名设置输出文件?
例如,以mapreduce中流行的wordcount为例。如果我给它一个具有正确语法的任意文件,它应该找到键(单词)和它们出现的频率。如何得到一个输出,其中每个键是文件名,文件中是值?
(我这样问是因为我目前的理解是,multipleoutputs仍然需要指定要使用的特定文件名)
使用hadoop 0.20.205.0
(还有人能给我介绍一些关于这个hadoop版本的好教程吗?)

pgccezyw

pgccezyw1#

在多输出中使用此函数,初始化作业时无需在任何位置预先分隔文件名。
用减速机上的这个-

  1. void write(K key, V value, String baseOutputPath);

baseoutputpath可以是键的字符串表示形式。
例如。 void write(K key, V value, getFileName(key)) ```
getFileName(K key){
return (key.toString());
}

  1. 请看链接中的例子,你会明白的。
  2. 此外,您不需要使用 `context.write()` 从减速器上拆下。而是使用倍数输出 `write()` 只起作用。
  3. 在我看来,这让一切都充满活力,如果你想的话。
  4. 注解(注解后):
  5. 既然你说你不能使用乘法输出,那就是另一种方法。
  6. 由于reduce函数只处理一个键,因此可以使用hadoop文件系统apihdfs中创建一个文件(使用您的键名),而不是执行context.writekeyvalue)。
  7. 比如:

FileSystem fs = file.getFileSystem(context.getConfiguration());
FSDataOutputStream fileOut = fs.create(key.toString());

  1. create()函数将返回一个fsdataoutputstream对象。使用write()函数写入文件。
  2. 完成后关闭文件系统对象。类似于- `fs.close();`
展开查看全部
csga3l58

csga3l582#

如果要基于不同的键将值写入多个文件,只需使用键即可( String s、 我假设)以通常的方式构造文件名并创建文件,例如使用filewriter。

相关问题