我想在reduce函数中访问另一个文件(除了要映射的输入文件)。这可能吗 ?
答案 0 :(得分:2)
查看分布式缓存。您可以将小文件发送到mapper或reducer。
(如果你使用Java)
在您的主/驱动程序中,设置作业文件:
job.addCacheFile(new URI("path/to/file/inHadoop/file.txt#var"));
注意: var 是用于在mapper / reducer中访问文件的变量名,即下面代码中的fn [1]。
在mapper或reducer中,从上下文中获取文件:
public void setup(Context context) throws IOException{
Configuration conf = context.getConfiguration();
URI[] cacheFiles = context.getCacheFiles();
String[] fn = cacheFiles[0].toString().split("#");
BufferedReader br = new BufferedReader(new FileReader(fn[1]));
String line = br.readLine();
//do something with line
}
注意: cacheFiles [0] 是指您从主/驱动程序发送的文件