如何根據鍵名設置輸出文件?如何根據鍵名設置輸出文件?
例如,在mapreduce中採用流行的WordCount示例。如果我用正確的語法給它一個任意的文件,它應該找到關鍵字(單詞)和它們出現的頻率。如何獲得輸出,其中每個鍵都是文件名,文件內部是值?
(我問,因爲我目前的理解是,MultipleOutputs還需要指定特定文件名使用)
使用Hadoop 0.20.205.0
(也可以有人點我一些好的教程這個hadoop版本?)
如何根據鍵名設置輸出文件?如何根據鍵名設置輸出文件?
例如,在mapreduce中採用流行的WordCount示例。如果我用正確的語法給它一個任意的文件,它應該找到關鍵字(單詞)和它們出現的頻率。如何獲得輸出,其中每個鍵都是文件名,文件內部是值?
(我問,因爲我目前的理解是,MultipleOutputs還需要指定特定文件名使用)
使用Hadoop 0.20.205.0
(也可以有人點我一些好的教程這個hadoop版本?)
With this function in MultipleOutputs您不需要在初始化作業時在任何位置預先指定文件名。
使用該從減速 -
void write(K key, V value, String baseOutputPath);
baseOutputPath可以成爲你的關鍵的字符串表示。
例如void write(K key, V value, getFileName(key))
getFileName(K key){
return (key.toString());
}
請看看鏈接中的例子,你會明白的。
此外,您不需要從減速器用戶context.write()
。而是僅使用 MultipleOuputs'write()
函數。
這使得一切都變得動態,在我看來,如果這就是你想要的。
NOTE(註釋後):
因爲,你說你不能使用MultipleOutputs的是另一種方式,你其實可以到 這一點。
喜歡的東西:
FileSystem fs = file.getFileSystem(context.getConfiguration());
FSDataOutputStream fileOut = fs.create(key.toString());
create()函數將返回你FSDataOutputStream對象。使用write()函數寫入文件。
完成後關閉FileSystem對象。 類似 - fs.close();
不要以爲我可以在0.20.205.0中使用 – Julian
@Julian:爲什麼要注意? –
@ Julian:我已經更新了我的答案,如果您不打算自己創建MultipleOutputs,那麼應該支持Hadoop 0.20.205。 –
如果你想要根據不同的密鑰寫入多個文件的值,只需使用密鑰(String
s,我會推測)來構造文件名並以通常的方式創建文件例如,與FileWriter。
請每個帖子提問一個問題。 – chrylis