Преобразование Stringified MapWritable в объект внутри Mapper

На самом деле я пытаюсь реализовать алгоритм машинного обучения, который требует от меня записи вывода редуктора в файл, а затем чтения этого файла в следующем преобразователе. Проблема в том, что я пишу объект MapWritable, созданный в редукторе в файле, но теперь, когда я хочу получить доступ к объекту, он приходит только как строка. Есть ли способ преобразовать этот объект org.apache.hadoop.io.MapWritable@72d01691 в фактический объект MapWritable при чтении из файла??

Часть моего кода в картографе:

DoubleWritable[][] Tdata = new DoubleWritable[T.numRows()][T.numColumns()];
for (int k = 0; k < Tdata.length; k++) {
    for (int j = 0; j < Tdata[k].length; j++) {
        Tdata[k][j] = new DoubleWritable(T.get(k, j));
    }
}
DoubleArrayWritable t = new DoubleArrayWritable();
t.set(Tdata);

DoubleWritable[][] Hdata = new DoubleWritable[H.numRows()][H.numColumns()];
for (int k = 0; k < Hdata.length; k++) {
    for (int j = 0; j < Hdata[k].length; j++) {
        Hdata[k][j] = new DoubleWritable(H.get(k, j));
    }
}
DoubleArrayWritable h = new DoubleArrayWritable();
h.set(Hdata);

mw.put(new IntWritable(0), h);
mw.put(new IntWritable(1), t);
context.write(new Text(splitId), mw);

В javascript мы используем eval для таких вещей, есть ли для этого такие ярлыки?


person Mohini    schedule 17.11.2016    source источник


Ответы (1)


Вы, вероятно, записываете свои данные, используя TextOutputFormat, это значение по умолчанию, или вы могли установить его.

Чтобы правильно получить фактические объекты, вы должны записать свой вывод, используя SequenceFileOutputFormat, и прочитать, используя SequenceFileInputFormat в следующем задании.

Вы можете установить форматы ввода/вывода, используя что-то вроде:

job.setInputFormat(SequenceFileInputFormat.class);
job.setOutputFormat(SequenceFileOutputFormat.class);

В принимающем маппере вам нужно настроить входящие объекты так, чтобы они соответствовали типам, выводимым предыдущим редюсером.

person Binary Nerd    schedule 17.11.2016
comment
На самом деле я пробовал это в первую очередь, но из-за использования старого API я получал ошибку. Но теперь все улажено. спасибо кстати - person Mohini; 18.11.2016