Java泛型无法正确推断出通用的mapreduce.lib.output.FileOutputFormat

时间:2014-05-20 18:45:37

标签: java generics hadoop

我正在尝试编写通用方法,这些方法可以避免为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;

我的错误是什么?

0 个答案:

没有答案