在mapreduce map class

时间:2017-03-09 11:26:06

标签: java mapreduce

我在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 {

我得到“String token;”错误 :     令牌“;”上的语法错误,{此标记后的预期

之后的错误:     令牌上的语法错误,而不是预期的ConstructorHeaderName

并在“public void”之后出现错误:     此行有多个标记      - 令牌“,”的语法错误;预期      - 令牌“,”的语法错误;预期      - 令牌上的语法错误“(”,;;      - 覆盖

所以我的问题是是否可以导入我想在地图类中但在@override之前使用的变量?我怎么能这样做?

在第一个答案中,我尝试使用“public static ...”

    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;
    }

但我又得到了错误。

当我尝试阅读我的文件时,我得到了 此行有多个标记      - 未处理的异常类型      FileNotFoundException异常          - 资源泄漏:“BR”永远不会关闭

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

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

1 个答案:

答案 0 :(得分:0)

您正在寻找两个重要的事情来为您的代码添加爵士乐。

  1. Map提供setUp()Map()和Cleanup()功能。
  2. 该功能可用于在设置中读取一些外部文件,ETL用于Map()中的单个行,并清理Cleaup中的任何资源。
  3. 分布式缓存是MR farmework提供的服务,在驱动程序上,您分发文件,文件在Map或Reduce工作的所有数据节点都可用。
  4. 请仔细阅读以下链接以获得深入了解。

    分布式缓存,SetUp()映射和清理()

      
        
    1. http://bytepadding.com/big-data/map-reduce/map-side-joins-in-map-reduce/
    2.   
    3. http://bytepadding.com/map-reduce/
    4.