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

发布于 2024-12-02 18:00:38 字数 289 浏览 2 评论 0原文

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

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

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

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

The input file to my hadoop M/R job is a text file in which the records are separated by tab character '\t' instead of newline '\n'. How can I instruct hadoop to split using the tab character as by default it splits around newlines and each line in the text file is taken as a record.

One way to do it is to use a custom input format class that uses a filter stream to convert all tabs in the original stream to newlines. But this does not look elegant.

Another way would be to use java.util.Scanner with tab as the separator. But I cannot figure out how to use the java.util.Scanner class in the input format classes.

What is the best approach and alternatives?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

寻找一个思念的角度 2024-12-09 18:00:38

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

Values '\r' and '\n' hard-coded in org.apache.hadoop.util.LineReader class, so you can't use TextInputFormat with tab-separated records. But it is not difficult to implement own InputFormat with special LineReader class. The simplest solution is to copy-paste TextInputFormat, LineRecordReader and LineReader classes, move them to your package and change LineReader implementation.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文