PIG 不读取我的自定义 InputFormat
Posted
技术标签:
【中文标题】PIG 不读取我的自定义 InputFormat【英文标题】:PIG doesn't read my custom InputFormat 【发布时间】:2012-12-18 23:00:43 【问题描述】:我有一个自定义的MyInputFormat
来处理multi-lined inputs 的记录边界问题。但是当我将MyInputFormat
放入我的UDF 加载函数时。如下:
import org.apache.hadoop.mapreduce.InputFormat;
public class EccUDFLogLoader extends LoadFunc
@Override
public InputFormat getInputFormat()
System.out.println("I am in getInputFormat function");
return new MyInputFormat();
import org.apache.hadoop.mapreduce.lib.input.TextInputFormat;
public class MyInputFormat extends TextInputFormat
public RecordReader createRecordReader(InputSplit inputSplit, JobConf jobConf) throws IOException
System.out.prinln("I am in createRecordReader");
//MyRecordReader suppose to handle record boundary
return new MyRecordReader((FileSplit)inputSplit, jobConf);
对于每个映射器,它会打印出I am in getInputFormat function
,但不会打印出I am in createRecordReader
。我想知道是否有人可以提供有关如何将我的服装 MyInputFormat 连接到 PIG 的 UDF 加载器的提示?非常感谢。
我在 Amazon EMR 上使用 PIG。
【问题讨论】:
尝试在createRecordReader
方法上添加@Override
注释以确保您拥有正确的签名
【参考方案1】:
您的签名与父类的签名不匹配(您缺少 Reporter 参数),试试这个:
@Override
public RecordReader<LongWritable, Text> getRecordReader(
InputSplit inputSplit, JobConf jobConf, Reporter reporter)
throws IOException
System.out.prinln("I am in createRecordReader");
//MyRecordReader suppose to handle record boundary
return new MyRecordReader((FileSplit)inputSplit, jobConf);
编辑抱歉,我之前没有发现这一点,正如您所指出的,您需要改用新的 API 签名:
@Override
public RecordReader<LongWritable, Text>
createRecordReader(InputSplit split,
TaskAttemptContext context)
System.out.prinln("I am in createRecordReader");
//MyRecordReader suppose to handle record boundary
return new MyRecordReader((FileSplit)inputSplit, jobConf);
而您的 MyRecordReader 类需要扩展 org.apache.hadoop.mapreduce.RecordReader
类
【讨论】:
如果我放了@Override,那么它会给我错误说MyInputFormat.java:11: method does not override or implement a method from a supertype @Override.
该错误是因为您当前的方法签名没有覆盖父方法。添加 Reporter 参数,你应该没问题
Pig getInputFormat
期望 org.apache.hadoop.mapreduce.InputFormat
所以 MyInputFormat
中的 TextInputFormat
来自 org.apache.hadoop.mapreduce.lib.input.TextInputFormat
。它没有getRecordReader
,而是createRecordReader
。这就是我使用createRecordReader
的原因。它仍然给我错误。
或者我不应该扩展TextInputFormat
?如果是这样,我应该扩展到哪一个??
你应该扩展 org.apache.hadoop.mapreduce.lib.input.TextInputFormat以上是关于PIG 不读取我的自定义 InputFormat的主要内容,如果未能解决你的问题,请参考以下文章
大数据之Hadoop(MapReduce):自定义InputFormat