如何指定tab作为hadoop输入文本文件的记录分隔符



我的hadoop M/R作业的输入文件是一个文本文件,其中记录由制表符't'而不是换行符'n'分隔。我如何指示hadoop使用制表符分割,因为默认情况下它在换行符周围分割,并且文本文件中的每一行都被视为记录。

一种方法是使用自定义输入格式类,该类使用过滤器流将原始流中的所有制表符转换为换行符。但这看起来并不优雅。

另一种方法是使用java.util.Scanner和tab作为分隔符。但是我不知道如何在输入格式类中使用java.util.Scanner类。

最好的方法和替代方案是什么?

值'r'和'n'硬编码在org.apache.hadoop.util.LineReader类,所以你不能使用TextInputFormat与制表符分隔的记录。但是用特殊的LineReader类实现自己的InputFormat并不难。最简单的解决方案是复制粘贴TextInputFormat, LineRecordReader和LineReader类,将它们移动到您的包中并更改LineReader的实现。

最新更新