SequenceFileAsBinaryInputFormat

SequenceFileAsBinaryInputFormat

我正在尝试在MapReduce程序中读取SequenceFile,其输入格式为Mapper。序列文件将SequenceFileAsBinaryInputFormat作为键,并将IntWritable作为值。

job.setInputFormatClass(SequenceFileAsBinaryInputFormat.class);

映射器获取BytesWritable作为键和值。
public void map(BytesWritable key, BytesWritable value, Context context)

现在,我试图将密钥转换回ArrayWritable,但是我得到了IntWritable。看来我在做一些根本错误的事情。
new IntWritable(Integer.parseInt(new String(key.getBytes())));

最佳答案

BytesWritable类公开数据的原始二进制表示形式(无论它是哪种类型)。如果要存储数字,则原始二进制表示形式由数字的序列化类确定。几乎肯定不会看起来像parseInt期望的“123”之类的漂亮文本。更有可能是一些字节块,例如1A34E56C ...等,具体取决于输出序列化格式。

如果您的数据实际上是文本,那么最好使用TextInputFormat。另一方面,如果您知道文件的数据类型是什么,那么最好使用SequenceFile。当您需要访问磁盘上数据的原始表示形式时(例如,如果您缺少用于反序列化数据的类,并且需要自己提供一个),SequenceFileAsBinaryInputFormat非常有用。

关于hadoop - 从SequenceFileAsBinaryInputFormat读取 key ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20841155/

10-12 23:02