gpt4 book ai didi

hadoop - 如何在 MapReduce 中设置自定义输入格式?

转载 作者:可可西里 更新时间:2023-11-01 16:34:00 27 4
gpt4 key购买 nike

我正在编写 MapReduce 程序并使用 org.apache.hadoop.mapred.* 中的类。谁能告诉我这个错误的原因?我的 CustomInputFormat 类扩展了 InputFormat 并且我已经覆盖了 createRecordReader 方法。

我的 CustomInputFormat 的签名是:

class ParagraphInputFormat extends InputFormat {

@Override
public RecordReader createRecordReader(InputSplit arg0,
TaskAttemptContext arg1) throws IOException, InterruptedException {
return new CustomRecordReader();
}

@Override
public List<InputSplit> getSplits(JobContext arg0) throws IOException,
InterruptedException {
// TODO Auto-generated method stub
return null;
}

}

CustomRecordReader 的签名是 class CustomRecordReader extends RecordReader

在声明此类时,我使用了 org.apache.hadoop.mapreduce.。我对 org.apache.hadoop.mapred. 和 org.apache.hadoop.mapreduce.* 感到困惑。 Eclipse 有时会继续显示已弃用的消息。我听说 apache 添加了一些类,然后删除了这些类,然后又添加了以前的类。是因为那个吗?它会影响我的代码吗?

JobConf conf = new JobConf(new Configuration(),MyMRJob.class);
conf.setJobName("NameofJob");

conf.setOutputKeyClass(CutomeKeyClass.class); //no error to this line
conf.setOutputValueClass(IntWritable.class);

conf.setMapperClass(MYMap.class);
conf.setCombinerClass(MyReduce.class);
conf.setReducerClass(MyReduce.class);


conf.setInputFormat(CustomInputFormat.class);//ERROR to this line while typing
conf.setOutputFormat(IntWritable.class);

FileInputFormat.setInputPaths(conf, new Path(args[0]));
FileOutputFormat.setOutputPath(conf, new Path(args[1]));

JobClient.runJob(conf);

最佳答案

您的输入格式扩展了 mapreduce 包的 InputFormat(它扩展而不是实现并且签名匹配新 api 的签名),但您的作业配置使用旧 API(JobConf 而不是 Job)。

因此,您需要修改自定义输入格式以实现 InputFormat (o.a.h.mapred.InputFormat),或者修改作业配置以使用新的 API (Job)

关于hadoop - 如何在 MapReduce 中设置自定义输入格式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15598537/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com