8

我有一个顺序文件,它是 hadoop map-reduce 作业的输出。在这个文件中,数据以键值对的形式写入,而值本身就是一个映射。我想将该值作为 MAP 对象读取,以便进一步处理它。

    Configuration config = new Configuration();
    Path path = new Path("D:\\OSP\\sample_data\\data\\part-00000");
    SequenceFile.Reader reader = new SequenceFile.Reader(FileSystem.get(config), path, config);
    WritableComparable key = (WritableComparable) reader.getKeyClass().newInstance();
    Writable value = (Writable) reader.getValueClass().newInstance();
    long position = reader.getPosition();

    while(reader.next(key,value))
    {
           System.out.println("Key is: "+textKey +" value is: "+val+"\n");
    }

程序的输出: Key is: [this is key] value is: {abc=839177, xyz=548498, lmn=2, pqr=1}

在这里,我将值作为字符串,但我希望它作为地图的对象。

4

1 回答 1

6

查看SequenceFile#next(Writable, Writable)的 API 文档

while(reader.next(key,value))
{
       System.out.println("Key is: "+textKey +" value is: "+val+"\n");
}

应该替换为

while(reader.next(key,value))
{
       System.out.println("Key is: "+key +" value is: "+value+"\n");
}

使用SequenceFile.Reader#getValueClassName获取 SequenceFile 中的值类型。SequenceFile 在文件头中有键/值类型。

于 2011-11-25T09:30:26.427 回答