嗨,我想在hadoop中列出一个学习列表,以便如果我有两个文件示例:positivereview.txt和negativereview.txt,并且每个文本都有以下评论:

(positivereview.txt)
评论ID 1:电影似乎很酷,我特别喜欢它的 Action 部分。
评价ID 2 ...
评论ID 3 ...等。

(negativereview.txt)
点评ID 1:电影很烂,我看着细节, Action 还真是搞砸了。
评价ID 2 ...
评论ID 3 ...等。

我要开发的程序的输出应该是这样的(一个文件中两个txt文件的结果):

  • 输入:2p / 2n
  • 早上:7p / 3n
  • 电影:5p / 2n
  • that:8p / 9n

  • (p-positivereview.txt n- negaivereivew.txt)

    我在hadoop-mapreduce-examples-2.7.3.jar上使用了这个wordcount java程序,但是它只会计算两个文档中的所有单词,不像我想要的那样分开。

    我应该如何构建它,是否有必要修改hadoop-mapreduce-examples-2.7.3.jar(来自hadoop包含的库..),这样我就可以实现

    谢谢

    最佳答案

    假设您从WordCount程序中获得了两个输出文件,则分别在pos.txt和neg.txt上运行。

    我假设输出文件的结构是这样的

    在2

    电影3

    那6

    ...

    您需要编写另一个MapReduce程序(将输入作为先前MapReduce的输出目录),键值对应该是这样的

    更新:

       class PosNegMapper extends Mapper<LongWritable, Text, Text, IntWritable> {
    
        @Override
        public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
            String s_arr[] = value.toString().split("\\s");
            int val = Integer.parseInt(s_arr[1]);
            context.write(new Text(s_arr[0]), new IntWritable(val));
        }
    
    }
    
    class PosNegReducer extends Reducer<Text, IntWritable, Text, Text> {
    
        @Override
        public void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {
          ArrayList<IntWritable> arls = new ArrayList<>();
          for( IntWritable val : values){
             arls.add(val);
          }
          if(arls.size()<2)
              arls.add(new IntWritable(0));
          String s = arls.get(0) + "p/" + arls.get(1) + "n" + System.getProperty("line.separator"); //Here, I took liberty that the word must be in both files.
          Text result=new Text(s);
          context.write(key, result);
        }
    
    }
    

    更新1:

    我想我误会了一些东西。因此,从第一步开始看。

    1)初始文件是posReviews.txtnegReviews.txt

    2)因此,现在在这两个文件上运行WordCount MapReduce。(处理类似
    标记,小写和大写字母等)

    3)因此,从此MapReduce中,您将获得两个文件pos.txtneg.txt

    4)现在,PosNeg.java并使用此pom.xml使用maven构建单个jar。 Setup Maven for windows。使用Netbeans顺利完成工作(在设置项目时查看程序包名称,GroupID和其他内容)。

    5)您将获得一个包含所有必需文件的jar,其名称为“PosNeg-1.0-SNAPSHOT-jar-with-dependencies”。使用命令“hadoop jar ... / PosNeg-1.0-SNAPSHOT-jar-with-dependencies.jar com.ga.posneg.PosNeg input_dir output_dir”运行此jar。

    试试这个,让我知道。

    关于java - 如何制作两个文件的学习列表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43014678/

    10-12 03:23
    查看更多