Java 在mapreduce映射类中导入变量
我在Eclypse中使用mapreduce时出错,我无法理解 在映射某些功能之前,我需要导入一个具有已知特性(关键字)的文件,以便映射新特性。我首先在覆盖之后导入它,但是因为我有很多线,并且它为每个贴图导入它,所以计算时间非常长。 我尝试在类和@Override之间导入变量,以便只导入一次,然后在类映射中使用它,但出现以下错误:Java 在mapreduce映射类中导入变量,java,mapreduce,Java,Mapreduce,我在Eclypse中使用mapreduce时出错,我无法理解 在映射某些功能之前,我需要导入一个具有已知特性(关键字)的文件,以便映射新特性。我首先在覆盖之后导入它,但是因为我有很多线,并且它为每个贴图导入它,所以计算时间非常长。 我尝试在类和@Override之间导入变量,以便只导入一次,然后在类映射中使用它,但出现以下错误: public static class Map extends Mapper<LongWritable, Text, Text, Text > {
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任务中使用它们作为条件。您正在寻找两件重要的事情来优化代码
可以发布完整的代码和完整的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;
}