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

hadoop程序中的类型不匹配错误

翟展
2023-03-14
import java.io.IOException;
import java.util.*;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
public class CommonFriends {
        public static class TokenizerMapper
                extends Mapper<Object, Text, Text, IntWritable>{
                private IntWritable friend = new IntWritable();
                private Text friends = new Text();
                public void map(Object key, Text value, Context context )     throws IOException, InterruptedException {
                        StringTokenizer itr = new     StringTokenizer(value.toString(),"\n");
                    while (itr.hasMoreTokens()) {
                            String[] line = itr.nextToken().split(" ");
                            if(line.length > 2 ){
                                    int person = Integer.parseInt(line[0]);
                                    for(int i=1; i<line.length;i++){
                                            int ifriend = Integer.parseInt(line[i]);
                                            friends.set((person < ifriend ? person+"-"+ifriend : ifriend+"-"+person));
                                            for(int j=1; j< line.length; j++ ){
                                                    if( i != j ){
                                                            friend.set(Integer.parseInt(line[j]));
                                                            context.write(friends, friend);
                                                    }
                                            }
                                    }
                            }
                    }
            }
    }

    public static class IntSumReducer extends Reducer<Text,IntWritable,Text,Text> {
            private Text result = new Text();
            public void reduce(Text key, Iterable<IntWritable> values, Context context)
                    throws IOException, InterruptedException {
                    HashSet<IntWritable> duplicates = new HashSet();
                    ArrayList<Integer> tmp = new ArrayList();
                    for (IntWritable val : values) {
                            if(duplicates.contains(val))
                                    tmp.add(val.get());
                            else
                                    duplicates.add(val);
                    }
                    result.set(tmp.toString());
                    context.write(key, result);
            }
    }

    public static void main(String[] args) throws Exception {
            Configuration conf = new Configuration();
            Job job = Job.getInstance(conf, "Common Friends");
            job.setJarByClass(CommonFriends.class);
            job.setMapperClass(TokenizerMapper.class);
            job.setCombinerClass(IntSumReducer.class);
            job.setReducerClass(IntSumReducer.class);
            job.setMapOutputKeyClass(Text.class);
            job.setMapOutputValueClass(IntWritable.class);
            job.setOutputKeyClass(Text.class);
            job.setOutputValueClass(Text.class);
            FileInputFormat.addInputPath(job, new Path(args[0]));
            FileOutputFormat.setOutputPath(job, new Path(args[1]));
            System.exit(job.waitForCompletion(true) ? 0 : 1);
    }
}

错误: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.apache.hadoop.mapred.task$newcombinerrunner$outputconverter.write(task.java:1667)在apred.maptask$NewOutputCollector.Close(maptask.java:723)在org.apache.hadoop.mapred.maptask.runnewmapper(maptask.java:793)在org.apache.hadoop.mapred.maptask.run(maptask.java:341)在org.apache.hadoop.mapred.maptask.run(maptask.java:341)在org.apache.hadoop.mapred.yarnchild$2.run(yarnchild.java:164)在

这是我的代码,错误信息如下。知道吗??我认为问题在于mapper和reducer的输出类的配置,输入文件是一个文件中的数字列表。如有需要,将提供更多细节。程序在朋友之间找到共同的朋友

共有1个答案

解飞语
2023-03-14

删除代码中的Job.SetCombinerClass(IntSumReducer.Class);可以解决此问题

 类似资料:
  • 我是新手,尝试运行我第一个hadoop程序。我在Hadoop中执行wordcount作业时遇到了一些问题。 当我运行我的程序,然后我得到以下错误消息。 16/12/23 00:22:41信息MapReduce.job:任务Id:尝试_1482432671993_0001_M_000001_1,状态:失败错误:java.io.ioException:映射项中的类型不匹配:应为org.apache.h

  • 我得到这个错误: 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)在wordcou

  • 我有以下具有以下方法的类。 GsonHelper为我提供了一些 在Java 7之前,我一直使用这种方法,例如: 这工作得很好。因为这个方法会返回一个布尔值,我可以在“if”中使用它。但是当我换到Java 8时,这就不可能了。编译器抱怨: 类型不匹配:无法从对象转换为布尔值 我知道java.lang.Boolean可以为空。我可以通过以下方式解决这个问题: 但我很好奇,为什么这在Java 7中有效,

  • 问题内容: 我试图在Swift中使用JSONDecoder将JSON转换为Structs,所以我编写了所有Structs,将它们修改了几个小时,但它仍然给我这个错误。我不知道是否有办法查看给出此信息的行。我将在下面发布我的struct,并在其后发布Json File链接。 完整的错误描述是: typeMismatch(Swift.Dictionary ,Swift.DecodingError.Co

  • 我正在尝试解析我的json数据 我解析数据的代码是 我得到了错误

  • 我正在使用此代码并获得类型不匹配的错误,运行时错误'13'错误在下面标记的行中,而具体错误是由于其中条件()在查询...