有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何读取hadoop顺序文件?

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

    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是:[这是Key]值是:{abc=839177,xyz=548498,lmn=2,pqr=1}

这里我得到的值是字符串,但我希望它是map的对象


共 (1) 个答案

  1. # 1 楼答案

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

    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在文件头中具有键/值类型