首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在hadoop应用程序中重写InputFormat和OutputFormat

如何在hadoop应用程序中重写InputFormat和OutputFormat
EN

Stack Overflow用户
提问于 2012-10-06 20:07:14
回答 2查看 1.1K关注 0票数 1

我有一个应用程序需要读取一个文件,这是ArrayList的序列化结果。(ArrayList<String>,此列表中的50000条记录,大小: 20MB)我不知道如何准确地将数据读取到hadoop平台。我只有点感觉我需要覆盖InputFormat和OutpurFormat。我是hadoop平台的初学者。你能给我一些建议吗?

谢谢,

郑。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-06 21:09:23

首先,您需要扩展FileInputFormat,特别是要实现抽象的FileInputFormat.createRecordReader方法。

您可以查看诸如LineRecordReader ( TextInputFormat用来处理文本文件)之类的代码的源代码。

从那时起,你基本上只能靠自己了(也就是说,这取决于你的ArrayList是如何序列化的)。查看LineRecordReader的源代码,并尝试将其与ArrayList的序列化方式联系起来。

还有一些需要注意的地方,你的文件格式是可拆分的吗?例如,您是否可以在文件中查找偏移量并从那里恢复流(文本文件可以,因为它们只向前扫描到当前行的末尾,然后从那里开始)。如果您的文件格式使用压缩,您还需要考虑到这一点(例如,您不能随机查找gzip文件中的某个位置)。默认情况下,FileInputFormat.isSplittable将返回true,您可能希望最初将其覆盖为false。如果你坚持使用“不可拆分”,那么请注意,你的文件将由单个映射器处理(与其大小无关)。

票数 2
EN

Stack Overflow用户

发布于 2012-10-07 05:46:44

在Hadoop上处理数据之前,您应该将数据上传到HDFS或其他受支持的文件系统。如果您正在控制上传过程,您可以将上传阶段的数据转换为您可以轻松处理的数据,例如:

如果数组可以包含带有'\n'的行,则

  • 简单文本文件(每个数组的item)
  • SequenceFile行

这是最简单的解决方案,因为您不必干预Hadoop的内部结构。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12759651

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档