我正在尝试编写通用方法,这些方法可以避免为map reduce作业编写一些样板代码。特别是我想写一个允许我设置输出和输入格式以及压缩作业的方法。我写的方法是:
private static void setOutputInputOutputFormatWithCompression(Job job,Class<? extends FileInputFormat<?, ?>> inputFormatClass, Class<? extends FileOutputFormat<?,?>> outputFormatClass) {
//set job input and output format
job.setInputFormatClass(inputFormatClass);
job.setOutputFormatClass(outputFormatClass);
//set compression for output
outputFormatClass.setCompressOutput(job, true);
outputFormatClass.setOutputCompressorClass(job, GzipCodec.class);
}
但是编译器给了我两个我不理解的错误。对于
为:
outputFormatClass.setCompressOutput(job, true);
错误是:
The method setCompressOutput(Job, boolean) is undefined for the type
Class<capture#7-of ?? extends FileOutputFormat<?,?>>
为:
outputFormatClass.setOutputCompressorClass(job, GzipCodec.class);
错误是:
The method setOutputCompressorClass(Job, Class<GzipCodec>) is undefined for the type Class<capture#10-of ? extends FileOutputFormat<?,?>>
我不明白的是FileOutputFormat定义了setOutputCompressorClass和setCompressOutput(请参阅http://hadoop.apache.org/docs/r2.3.0/api/org/apache/hadoop/mapreduce/lib/output/FileOutputFormat.html),因为我需要扩展FileOutputFormat的参数,所以我应该好好去。
我的导入声明是:
import org.apache.hadoop.io.compress.GzipCodec;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
我的错误是什么?