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

时间:2011-09-01 14:15:11

标签: java hadoop mapreduce inputstream tab-delimited

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

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

另一种方法是使用java.util.Scanner选项卡作为分隔符。但我无法弄清楚如何在输入格式类中使用java.util.Scanner类。

最佳方法和替代方案是什么?

1 个答案:

答案 0 :(得分:1)

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