我的任务是处理大文件的记录并输出它以保留订单。无法从一行中的任何字段中提取订单,因此我尝试使用来自TextInputFormat
的字节偏移用于这些目的,但遇到的问题是不同行的数量与不同偏移的数量不同。以下是我的代码的样子:
映射器:
public void map(LongWritable offset, Text text, Context ctx) {
ctx.getCounter(Main.COUNTERS.DISTINCT_LINES).increment(1l);
ctx.write(offset, processLine(text.toString()));
}
减速机:
public void reduce(LongWritable offset, Iterable<Text> texts, Context ctx) {
ctx.getCounter(Main.COUNTERS.DISTINCT_OFFSETS).increment(1l);
for(Text txt : texts) ctx.write(txt, NullWritable.get());
}
看来我得到的不同行数大于不同偏移量的数量。
更令人困惑的是,在打印了与多行关联的偏移后,偏移0
不在此列表中,拒绝了每个分割偏移从0
开始的假设。
有人可以解释这种行为吗?