从sequencefileasbinaryinputformat读取密钥

djmepvbi  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(371)

我正在读一本书 SequenceFile 在我的mapreduce程序中,输入格式为 Mapper 作为 SequenceFileAsBinaryInputFormat . 序列文件具有 IntWritable 作为关键和 ArrayWritable 作为价值。

job.setInputFormatClass(SequenceFileAsBinaryInputFormat.class);

Map程序将字节作为键和值写入。

public void map(BytesWritable key, BytesWritable value, Context context)

现在我想把钥匙换回去 IntWritable 但我得到了一个 NumberFormatException . 看来我做错了什么。

new IntWritable(Integer.parseInt(new String(key.getBytes())));
uyto3xhc

uyto3xhc1#

BytesWriteable类公开了数据的原始二进制表示(不管它是什么类型)。如果您存储的是数字,那么原始二进制表示由数字的序列化类决定。几乎可以肯定,它不会像parseint所期望的“123”那样看起来很好。更可能是一些字节块,比如1a34e56c。。。取决于输出序列化格式。
如果您的数据实际上是文本,您最好只使用textinputformat。另一方面,如果您知道文件的数据类型是什么,那么使用sequencefile更好。sequencefileasbinaryinputformat适用于需要访问磁盘上数据的原始表示形式的情况(例如,缺少反序列化数据的类,需要自己提供一个)。

相关问题