mapreduce-i为所有键获取相同的值

6ioyuze2  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(211)

我对mapreduce有问题。作为一个歌曲列表(“songname”#“userid”#“boolean”)的输入,我必须有一个歌曲列表,其中指定了不同用户听他们的次数。。。所以一个“”输出(“songname”,“timelistening”)。我使用hashtable只允许一对。对于短文件,它工作得很好,但是当我输入一个大约1000000条记录的列表时,它会为所有记录返回相同的值(20)。
这是我的Map:

public static class CanzoniMapper extends Mapper<Object, Text, Text, IntWritable>{

    private IntWritable userID = new IntWritable(0);
    private Text song = new Text();

    public void map(Object key, Text value, Context context) throws IOException, InterruptedException {
        String[] caratteri = value.toString().split("#");
        if(caratteri[2].equals("1")){
            song.set(caratteri[0]);
            userID.set(Integer.parseInt(caratteri[1]));
            context.write(song,userID);
        }
    }
  }

这是我的减速机:

public static class CanzoniReducer extends Reducer<Text,IntWritable,Text,IntWritable> {
    private IntWritable result = new IntWritable();

    public void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {
      Hashtable<IntWritable,Text> doppioni = new Hashtable<IntWritable,Text>();
      for (IntWritable val : values) {
        doppioni.put(val,key);
      }
      result.set(doppioni.size());
      doppioni.clear();
      context.write(key,result);
    }
  }

主要内容:

Configuration conf = new Configuration();

    Job job = new Job(conf, "word count");
    job.setJarByClass(Canzoni.class);
    job.setMapperClass(CanzoniMapper.class);
    //job.setCombinerClass(CanzoniReducer.class);
    //job.setNumReduceTasks(2);
    job.setReducerClass(CanzoniReducer.class);
    job.setOutputKeyClass(Text.class);
    job.setOutputValueClass(IntWritable.class);
    FileInputFormat.addInputPath(job, new Path(args[0]));
    FileOutputFormat.setOutputPath(job, new Path(args[1]));
    System.exit(job.waitForCompletion(true) ? 0 : 1);

知道吗???

n53p2ov0

n53p2ov01#

也许我解决了。这是一个输入问题。与歌曲数量相比,记录太多,因此在这些记录的列表中,每个用户至少列出一次每首歌曲。在我的测试中,我有20个不同的用户,所以很自然的结果是每首歌有20个用户。我必须增加不同歌曲的数量。

相关问题