Как анализировать CustomWritable из текста в Hadoop

Скажем, у меня есть временные метки для конкретных пользователей в текстовых файлах, например

#userid; unix-timestamp; value
1; 2010-01-01 00:00:00; 10
2; 2010-01-01 00:00:00; 20
1; 2010-01-01 01:00:00; 11
2; 2010-01-01 01:00:00, 21
1; 2010-01-02 00:00:00; 12
2; 2010-01-02 00:00:00; 22

У меня есть собственный класс SessionSummary, реализующий readFieldsи write из WritableComparable. Его цель — суммировать все значения для каждого пользователя за каждый календарный день.

Таким образом, преобразователь сопоставляет строки каждому пользователю, редюсер суммирует все значения за день для каждого пользователя и выводит SessionSummary как TextOutputFormat (используя toStringиз SessionSummary, как разделенные табуляцией Строки UTF-8):

1; 2010-01-01; 21
2; 2010-01-01; 41
1; 2010-01-02; 12
2; 2010-01-02; 22

Если мне нужно использовать эти сводные записи для второго этапа Map/Reduce, как мне проанализировать эти сводные данные для заполнения элементов? Могу ли я повторно использовать существующие readFields и методы записи (реализации интерфейса WritableComparable), используя текстовую строку как DataInput? Это (очевидно) не сработало:

public void map(...) {
    SessionSummary ssw = new SessionSummary();
    ssw.readFields(new DataInputStream(new ByteArrayInputStream(value.getBytes("UTF-8"))));
}

В целом: есть ли наилучшая практика реализации пользовательских ключей и значений в Hadoop, чтобы их можно было легко повторно использовать на нескольких этапах M/R, сохраняя при этом удобочитаемый текст на каждом этапе?

(версия Hadoop — 0.20.2 / CDH3u3)

5
задан thomers 15 March 2012 в 14:25
поделиться