我有一个文本文件和一个解析器,它将解析每一行并存储到我的customSplitInput中,我在自定义FileInputFormat阶段进行解析,因此我的拆分是自定义的。现在,我有两个分割,每个分割中都包含我的数据列表。
但现在,我的mapper函数在同一个分割上被反复调用。我认为mapper函数只会根据您的拆分次数进行调用?
我不知道这是否适用,但我的自定义InputSplit为getLength()返回一个固定数字,为getLocation()返回空字符串数组。我不确定该为这些投入什么。
@Override
public RecordReader<LongWritable, ArrayWritable> createRecordReader(
InputSplit input, TaskAttemptContext taskContext)
throws IOException, InterruptedException {
logger.info(">>> Creating Record Reader");
CustomRecordReader recordReader = new CustomRecordReader(
(EntryInputSplit) input);
return recordReader;
}
map()
对于InputFormat
中(或由其引用)RecordReader
的每条记录调用一次。例如,TextInputFormat
为输入中的每一行调用map()
,即使分割中通常有许多行。