Java 在mapreduce映射类中导入变量

Java 在mapreduce映射类中导入变量,java,mapreduce,Java,Mapreduce,我在Eclypse中使用mapreduce时出错,我无法理解 在映射某些功能之前,我需要导入一个具有已知特性(关键字)的文件,以便映射新特性。我首先在覆盖之后导入它,但是因为我有很多线,并且它为每个贴图导入它,所以计算时间非常长。 我尝试在类和@Override之间导入变量,以便只导入一次,然后在类映射中使用它,但出现以下错误: public static class Map extends Mapper<LongWritable, Text, Text, Text > {

我在Eclypse中使用mapreduce时出错,我无法理解

在映射某些功能之前,我需要导入一个具有已知特性(关键字)的文件,以便映射新特性。我首先在覆盖之后导入它,但是因为我有很多线,并且它为每个贴图导入它,所以计算时间非常长。 我尝试在类和@Override之间导入变量,以便只导入一次,然后在类映射中使用它,但出现以下错误:

public static class Map extends Mapper<LongWritable, Text, Text, Text > {

    HashSet<String> word = new HashSet<String>();
        BufferedReader BR = new BufferedReader(new FileReader(
                new File("/home/test")));
        String token;
        while((token = BR.readLine()) != null){
            word.add(token); 
        }

    @Override
    public void map(LongWritable key, Text value, Context context)
            throws IOException, InterruptedException {
公共静态类映射扩展映射器{
HashSet word=新HashSet();
BufferedReader BR=新的BufferedReader(新文件读取器(
新文件(“/home/test”);
字符串标记;
而((token=BR.readLine())!=null){
添加(令牌);
}
@凌驾
公共void映射(可长写键、文本值、上下文)
抛出IOException、InterruptedException{
我在“字符串标记”之后得到错误: 标记“;”上的语法错误,此标记后面应为{

在“while”错误之后: 令牌上出现语法错误,应为ConstructorHeaderName

在“public void”错误之后: 这条线上有多个标记 -令牌“,”上的语法错误;应为 -令牌“,”上的语法错误;应为 -标记“(”,)上出现语法错误;应为 -覆盖

所以我的问题是,有没有可能在@override之前导入我想在map类中使用的变量?我该怎么做


对于第一个答案,我尝试使用“公共静态…”

公共静态集newHashSet(字符串…字符串){
HashSet words=新的HashSet();
BufferedReader BR=新的BufferedReader(新文件读取器(
新文件(“/home/test”);
字符串标记;
而((token=BR.readLine())!=null){
加上(mot);
}
返回单词;
}
但我还是犯了错误

当我试图读取我的文件时,我得到 这条线上有多个标记 -未处理的异常类型 FileNotFoundException -资源泄漏:“BR”从未关闭

在while循环中 未处理的异常类型IOException


我只想导入我的文件并存储数据,以便以后在mapreduce任务中使用它们作为条件。

您正在寻找两件重要的事情来优化代码

  • Map提供setUp()Map()和Cleanup()功能
  • 该功能可用于读取安装程序中的某些外部文件、ETL Map()中的各个行以及清理Cleaup中的任何资源
  • 分布式缓存是由MR farmework提供的一项服务,您在驱动程序上分发了文件,这些文件在Map或Reduce工作的所有数据节点上都可用
  • 请通过以下链接深入了解

    分布式缓存、SetUp()映射和Cleanup()


  • 可以发布完整的代码和完整的stacktrace吗?while循环不是构造函数或方法的一部分。这就是为什么会出现此错误。
        public static Set<String> newHashSet(String... strings) {
            HashSet<String> words = new HashSet<String>();
            BufferedReader BR = new BufferedReader(new FileReader(
                    new File("/home/test")));
            String token;
            while((token = BR.readLine()) != null){
                words.add(mot);
            }
            return words;
        }