gpt4 book ai didi

hadoop - PIG 不读取我的自定义 InputFormat

转载 作者:可可西里 更新时间:2023-11-01 15:41:01 24 4
gpt4 key购买 nike

我有一个自定义的 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。我想知道是否有人可以提供有关如何将我的 Costome MyInputFormat 连接到 PIG 的 UDF 加载器的提示?非常感谢。

我在 Amazon EMR 上使用 PIG。

最佳答案

您的签名与父类的签名不匹配(您缺少 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

关于hadoop - PIG 不读取我的自定义 InputFormat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13942906/

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