Как прочитать последовательный файл hadoop? - PullRequest
8 голосов
/ 25 ноября 2011

У меня есть последовательный файл, который является выводом задания 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");
    }

вывод программы: ключ: [это ключ] значение: {abc = 839177, xyz = 548498, lmn = 2, pqr = 1}

Здесь я получаю значение в виде строки, но я хочу его в качестве объекта карты.

1 Ответ

6 голосов
/ 25 ноября 2011

Проверьте документацию API для SequenceFile # next (Доступно для записи, Доступно для записи)

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 имеет типы ключ / значение в заголовке файла.

...