Hadoop MapReduce错误类型不匹配:我试图编写一个程序,从CSV文件中查找最大编号,但我得到的密钥不匹配

Hadoop MapReduce错误类型不匹配:我试图编写一个程序,从CSV文件中查找最大编号,但我得到的密钥不匹配,hadoop,compilation,mapreduce,Hadoop,Compilation,Mapreduce,程序从CSV文件中存在的数十亿个数字中查找最大值 package org.devender; import java.io.IOException; import org.apache.hadoop.io.LongWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Mapper; publi

程序从CSV文件中存在的数十亿个数字中查找最大值

        package org.devender;

        import java.io.IOException;

        import org.apache.hadoop.io.LongWritable;
        import org.apache.hadoop.io.Text;
        import org.apache.hadoop.mapreduce.Mapper;

        public class SortMapper extends Mapper<LongWritable, Text, LongWritable, Text> {

            public void map(LongWritable ikey, Text ivalue, Context context)
                    throws IOException, InterruptedException {

                String line = ivalue.toString();

                String TextInt[]=line.split(",");

                int MAX =0;

                for (int i=0;i>TextInt.length;i++) {
                int n=Integer.parseInt(TextInt[i].toString());
                if (n>MAX) {
                    MAX = n;
                }


                }
                Text max = new Text("Maximum"); 
                LongWritable BIG = new LongWritable(MAX);

                context.write(BIG,max);
            }

        }


    Getting below error
package org.devender;
导入java.io.IOException;
导入org.apache.hadoop.io.LongWritable;
导入org.apache.hadoop.io.Text;
导入org.apache.hadoop.mapreduce.Mapper;
公共类SortMapper扩展映射器{
公共void映射(可长写ikey、文本ivalue、上下文)
抛出IOException、InterruptedException{
String line=ivalue.toString();
字符串TextInt[]=line.split(“,”);
int MAX=0;
对于(int i=0;i>TextInt.length;i++){
int n=Integer.parseInt(TextInt[i].toString());
如果(n>最大值){
MAX=n;
}
}
文本最大值=新文本(“最大值”);
LongWritable大=新的LongWritable(最大值);
context.write(大,最大);
}
}
低于误差
错误:java.io.IOException:映射中的键类型不匹配:应为 org.apache.hadoop.io.Text,收到org.apache.hadoop.io.LongWritable 位于org.apache.hadoop.mapred.MapTask$MapOutputBuffer.collect(MapTask.java:1072) 位于org.apache.hadoop.mapred.MapTask$NewOutputCollector.write(MapTask.java:715) 位于org.apache.hadoop.mapreduce.task.taskInputOutContextImpl.write(taskInputOutContextImpl.java:89) 位于org.apache.hadoop.mapreduce.lib.map.WrappedMapper$Context.write(WrappedMapper.java:112) 位于org.devender.SortMapper.map(SortMapper.java:31) 位于org.devender.SortMapper.map(SortMapper.java:1) 位于org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:145) 位于org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:787) 位于org.apache.hadoop.mapred.MapTask.run(MapTask.java:341) 位于org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:163) 位于java.security.AccessController.doPrivileged(本机方法) 位于javax.security.auth.Subject.doAs(Subject.java:415)

司机 这是我的驱动程序驱动程序

     package org.devender;        
        import org.apache.hadoop.conf.Configuration;        
        public class SortMapReduce {

            public static void main(String[] args) throws Exception {
                Configuration conf = new Configuration();
                Job job = Job.getInstance(conf, "JobName");
                job.setJarByClass(org.devender.SortMapReduce.class);
                job.setMapperClass(org.devender.SortMapper.class);

                job.setReducerClass(org.devender.SortReducer.class);

                // TODO: specify output types
                job.setOutputKeyClass(LongWritable.class);
                job.setOutputValueClass(Text.class);

                // TODO: specify input and output DIRECTORIES (not files)
                FileInputFormat.setInputPaths(job,new Path(args[0]));
                FileOutputFormat.setOutputPath(job,new Path(args[1]));

                if (!job.waitForCompletion(true))
                    return;
            }

        }


//Reducer - The output coming as 0,Maximum ...0,Maxium but i was expecting the maximum value from the file and the "Highest number" tag along with the value.
------------------------------------------------------------------------


    public void reduce(Iterable<LongWritable> _key, Text values, Context context)
                    throws IOException, InterruptedException {
                // process values
                LongWritable MAX = new LongWritable(0);

                for (LongWritable val : _key) {
                    if (val.compareTo(MAX)>0) {

                        MAX=val;
                    }
                }
                Text t=new Text("Highest Number ");
                context.write(MAX,t);

            }

        }
package org.devender;
导入org.apache.hadoop.conf.Configuration;
公共类分类介绍{
公共静态void main(字符串[]args)引发异常{
Configuration conf=新配置();
Job Job=Job.getInstance(conf,“JobName”);
job.setJarByClass(org.devender.SortMapReduce.class);
setMapperClass(org.devender.SortMapper.class);
setReducerClass(org.devender.SortReducer.class);
//TODO:指定输出类型
job.setOutputKeyClass(LongWritable.class);
job.setOutputValueClass(Text.class);
//TODO:指定输入和输出目录(不是文件)
setInputPaths(作业,新路径(args[0]);
setOutputPath(作业,新路径(args[1]);
如果(!job.waitForCompletion(true))
返回;
}
}
//Reducer-输出为0,Maxium…0,Maxium,但我希望文件中的最大值和“Highest number”标记以及值。
------------------------------------------------------------------------
公共void reduce(Iterable _键、文本值、上下文)
抛出IOException、InterruptedException{
//过程值
LongWritable MAX=新的LongWritable(0);
for(长可写val:_键){
如果(值比较到(最大值)>0){
MAX=val;
}
}
文本t=新文本(“最高数字”);
编写(最大,t);
}
}

我使用LongWritable作为键,在mapper参数中使用了相同的键,但不知道为什么编译器会显示预期的文本。我试图从一个文件中读取一行,并将其拆分为单独的数字,然后首先将其转换为int,并将其与行中的每个数字进行比较。并将其保存到输出上下文中,但编译器说的是预期文本,我不知道comiler为什么会预期文本,当我在映射器中特别提到它是一个可长写的。是否有人可以帮助解决此编译器错误。。现在输出为0最大值,0最大值。。。。那么…你的工作配置是什么?您是否正在使用
job.setOutputKeyClass
job.setOutputValueClass
job.setMapOutputKeyClass
,j
ob.setMapOutputValueClass
作为代码的一部分

你能分享整个代码吗

编辑1:这是代码,代码中有很多问题。你可以详细学习地图还原

import java.io.IOException;
导入org.apache.hadoop.conf.Configured;
导入org.apache.hadoop.fs.Path;
导入org.apache.hadoop.io.LongWritable;
导入org.apache.hadoop.io.NullWritable;
导入org.apache.hadoop.io.Text;
导入org.apache.hadoop.mapreduce.Job;
导入org.apache.hadoop.mapreduce.Mapper;
导入org.apache.hadoop.mapreduce.Reducer;
导入org.apache.hadoop.mapreduce.Reducer.Context;
导入org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
导入org.apache.hadoop.mapreduce.lib.input.TextInputFormat;
导入org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
导入org.apache.hadoop.mapreduce.lib.output.TextOutputFormat;
导入org.apache.hadoop.util.Tool;
导入org.apache.hadoop.util.ToolRunner;
公共类TestingMapReduce扩展配置的实现工具{
公共静态类SortMapper扩展映射器{
公共void映射(LongWritable ikey、Text-ivalue、Context-Context)抛出IOException、InterruptedException
import java.io.IOException;

import org.apache.hadoop.conf.Configured;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.NullWritable;
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.Reducer.Context;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.input.TextInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat;
import org.apache.hadoop.util.Tool;
import org.apache.hadoop.util.ToolRunner;


public class TestingMapReduce extends Configured implements Tool {

    public static class SortMapper extends Mapper<LongWritable, Text, Text, LongWritable> {

        public void map(LongWritable ikey, Text ivalue, Context context) throws IOException, InterruptedException {
            String line = ivalue.toString();

            String TextInt[] = line.split(",");

            int MAX = 0;

            for (int i = 0; i < TextInt.length; i++) {
                int n = Integer.parseInt(TextInt[i].toString());
                if (n > MAX) {
                    MAX = n;
                }
            }
            Text max = new Text("Maximum");
            LongWritable BIG = new LongWritable(MAX);

            context.write(max, BIG);
        }

    }

    public static class SortReducer extends Reducer<Text, LongWritable, Text, LongWritable> {
        Long MAX = 0L;
        public void reduce(Text _key, Iterable<LongWritable> values, Context context)
                throws IOException, InterruptedException {
            // process values

            for (LongWritable val : values) {
                if (val.get() > MAX) {
                    MAX = val.get();
                }
            }

            context.write(_key, new LongWritable(MAX));

        }

    }

    public int run(String[] arg0) throws Exception {

        Job job = Job.getInstance(getConf());

        // job.setJar("nyse-0.0.1-SNAPSHOT.jar");
        job.setJarByClass(getClass());
        job.setMapperClass(SortMapper.class);

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

        job.setReducerClass(SortReducer.class);

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

        job.setNumReduceTasks(1);

        job.setInputFormatClass(TextInputFormat.class);
        job.setOutputFormatClass(TextOutputFormat.class);

        FileInputFormat.setInputPaths(job, new Path(arg0[0]));
        FileOutputFormat.setOutputPath(job, new Path(arg0[1]));
        return job.waitForCompletion(true) ? 0 : 1;
    }

    public static void main(String args[]) throws Exception {
        System.exit(ToolRunner.run(new TestingMapReduce(), args));
    }

}