当前位置: 首页 > 知识库问答 >
问题:

Hadoop映射器和reducer值类型不匹配错误

束阳旭
2023-03-14
public class WordCountMapper extends MapReduceBase
    implements Mapper<LongWritable, Text, Text, IntWritable> {

  private final IntWritable one = new IntWritable(1);
  private Text word = new Text();

  public void map(LongWritable key, Text value, OutputCollector<Text, IntWritable>
        output, Reporter reporter) throws IOException {

    String line = value.toString();
    String[] words = line.split(",");
    String[] date = words[2].split(" ");
      word.set(date[0]+" "+date[1]+" "+date[2]);
      if(words[0].contains("0"))
          one.set(0);
      else
          one.set(4);
      output.collect(word, one);

  }
}

-----------------------------------------------------------------------------------

public class WordCountReducer extends MapReduceBase
    implements Reducer<Text, IntWritable, Text, Text> {

  public void reduce(Text key,Iterator<IntWritable> values,
                  OutputCollector<Text, Text> output,
                  Reporter reporter) throws IOException {

    int sad = 0;
    int happy = 0;
    while (values.hasNext()) {
      IntWritable value = (IntWritable) values.next();
      if(value.get() == 0)
          sad++; // process value
      else
          happy++;
    }

    output.collect(key, new Text("sad:"+sad+", happy:"+happy));
  }
}
---------------------------------------------------------------------------------

public class WordCount {

  public static void main(String[] args) {
    JobClient client = new JobClient();
    JobConf conf = new JobConf(WordCount.class);

    // specify output types
    conf.setOutputKeyClass(Text.class);
    conf.setOutputValueClass(IntWritable.class);

    // specify input and output dirs
    FileInputFormat.addInputPath(conf, new Path("input"));
    FileOutputFormat.setOutputPath(conf, new Path("output"));

    // specify a mapper
    conf.setMapperClass(WordCountMapper.class);

    // specify a reducer
    conf.setReducerClass(WordCountReducer.class);
    conf.setCombinerClass(WordCountReducer.class);

    client.setConf(conf);
    try {
      JobClient.runJob(conf);
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
}

我得到这个错误:

14/12/10 18:11:01 INFO Mapred.JobClient:任务Id:Attest_201412100143_0008_M_000000_0,状态:失败java.io.ioException:溢出在org.apache.hadoop.mapred.maptask$MapOutputBuffer.Collect(maptask.java:425)在wordcountmapper.map(wordcountmapper.java:31)在wordcountmapper.map(wordcountmapper.java:1)在org.apache.hadoop.mapred.maprunner.run在org.apache.hadoop.mapred.maptask处询问$MapOutputBuffer.sortandSpill(MapTask.java:785)$MapOutputBuffer.Access$1600(MapTask.java:286),在org.apache.hadoop.mapred.maptask$MapOutputBuffer.sortandSpill(MapTask.java:712)处询问$MapOutputBuffer.sortandSpill(MapTask.java

在此之后,错误会重复发生几次。有人能解释一下为什么会出现这个错误吗?我搜索了与此类似的错误,但我发现的所有错误都是映射器和还原器的键值类型不匹配,但正如我所看到的,映射器和还原器的键值类型匹配。提前谢谢你。

共有1个答案

公冶同
2023-03-14

尝试评论

conf.SetCombinerClass(WordCountReducer.Class);

然后跑。

job.setMapOutputKeyClass(Text.class);
job.setMapOutputValueClass(IntWritable.class);

job.setOutputKeyClass(Text.class);
job.setOutputValueClass(Text.class);

如果两者都发出相同的数据类型,则

job.setOutputKeyClass();
job.setOutputValueClass();
 类似资料:
  • 我正在尝试使用Spring Kafka2.2中引入的新类型映射特性: 向下滚动到“映射类型”: https://docs.spring.io/spring-kafka/reference/htmlsingle/#serdes 在生产者方面,我注册了一个映射,如下所示: 我在《Spring-Kafka》中把问题缩小到这个方法: https://github.com/spring-projects/s

  • 我在解决泛型问题时遇到了一些麻烦。我有一个“猫”对象列表和一个“狗”对象列表,我需要将它们传递到同一个方法中。该方法的返回类型是一个“字符串”和“动物列表”的映射,我试图找出一种方法来将带有动物列表的映射转换为带有猫或狗列表的映射。 这工作很好,如果我有一个单独的方法猫和狗,但我正在寻找一个更灵活的解决方案。 标题中出现错误的行: 注意:这是一个简化的例子,我必须能够使用地图中的列表作为“猫”或“

  • 错误:java.io.ioException:错误值类:类org.apache.hadoop.io.text不是类org.apache.hadoop.mapred.ifile$writer.append(ifile.java:194)在org.apache.hadoop.mapred.task$combineoutputCollector.collect(task.java:1350)在org.a

  • 我正在编写一个映射函数,它将键生成为一些user_id,值也是文本类型。我是这样做的 然后,在主程序中,我将映射器的输出类设置为: 因此,即使我将输出值的类设置为text.class,但在编译时仍然会出现以下错误:

  • 我试图通过使用多个测试数据在Cucumber DataTable中使用映射来自动化一个场景。在本测试中,我们将向测试步骤传递两次Username和Password。所以我们的测试应该输入用户名和密码一次,点击登录按钮,并重复相同的步骤再次。 我已经尝试使用for循环来使用Maps集合重复测试。1.我收到一个错误,表示类型不匹配:无法从元素类型2。当我将其转换为时,我得到另一个错误,说明方法send

  • 问题内容: 我正在Hadoop上实现PageRank算法,正如标题所述,我在尝试执行代码时想到了以下错误: 地图中密钥的类型不匹配:预期的org.apache.hadoop.io.Text,收到的org.apache.hadoop.io.LongWritable 在我的输入文件中,我将图形节点ID存储为键,并将一些关于它们的信息存储为值。我的输入文件具有以下格式: 1 \ t 3.4,2,5,6,