Я должен программировать на C ++ для Hadoop, и я имею дело со сложной структурой выходного значения.
К сожалению, я не могу понять, как создать эту структуру в формате Avro в MapReduce.
Есть некоторые авторы, такие как DataFileWriter, и они хорошо работают для меня. Но все это не имеет смысла с точки зрения HDFS.
Как я излучаю структуру сейчас:
IOSerializer serializer;
context.emit(key, serializer.toString(output));
Этот пользовательский метод toString я написал сам (извините за название, я полностью из мира Java).
Это просто пользовательская сериализация в строку. Я действительно хочу немного совместимости здесь и решил использовать Avro.
Это код для записи Avro в файл:
avro::DataFileWriter<fusion_solve::graph> dfw("test.bin", schema);
dfw.write(output);
dfw.close();
То, что я хочу сделать, это что-то вроде этого:
IOSerializer serializer;
context.emit(serializer.toAvro(key, output));
На данный момент я буду счастлив получить в качестве выходных данных простую строку JSON, чтобы преобразовать ее позже.
Другой вариант для меня — написание пользовательского RecordWriter на Java. Но какой тип входных данных я должен использовать в этом случае, JSON?
Задача ещё не решена.
Других решений пока нет …