【发布时间】:2014-05-14 20:20:37
【问题描述】:
我有一个 128 MB 的文件,因此它被分成 2 个块(块大小 =64 MB)。 我正在尝试使用自定义记录读取器类将固定长度文件转换为分隔的 ASCII 文件
问题:
当处理文件的第一个拆分时,当我看到数据顶部有一个配置单元表时,我能够正确获取记录,它也在访问数据节点 2 以获取字符,直到记录结束。 但是,第二次拆分以 \n 字符开头,并且记录数也增加了一倍。
Ex:
First Split: 456 2348324534 34953489543 349583534
Second Split:
456 23 48324534 34953489543 349583534
作为记录阅读器的一部分,为了跳过在第一个输入拆分中读取的字符,添加了以下代码
FixedAsciiRecordReader(FileSplit genericSplit, JobConf job) throws IOException {
if ((start % recordByteLength) > 0) {
pos = start - (start % recordByteLength) + recordByteLength;
}
else {
pos = start;
}
fileIn.skip(pos);
}
输入固定长度文件在每条记录的末尾都有一个 \n 字符。
是否也应该为 start 变量设置任何值?
【问题讨论】: