Выдача данных столбца из редуктора в виде строки

Я пытаюсь обработать файл csv. In map() Я буду отправлять каждый столбец в качестве значения для редуктора. In reducer Я буду находить минимальное и максимальное значение и выполнять дальнейшую обработку. После обработки мне нужно указать контекст. Записать значение. Но попытаться вывести его определенным образом.

В редукторе я обрабатываю каждый столбец, но мне нужно вывести все row, то есть значения col1, значения col2, значения col3, значения col4.

Пример данных после обработки из редуктора

in reducer
0.62
0.38
0.9
in reducer
0.24
0.59
0.1
in reducer
0.5
1.0
0.2
in reducer
0.0
0.0
0.3

Ожидаемый результат

 0.62,0.24,0.5,0.5
 0.38,0.59,1.0,0.0
 0.9,0.1,0.2,0.3

Можно ли обрабатывать каждый отдельный ключ в редукторе для каждой итерации

key1value1,key2value1,key3value1
key1value2,key2value2,key3value2

Любые предложения


person USB    schedule 03.03.2014    source источник
comment
напишите 2 разных редуктора для максимума и минимума и объедините оба результата редуктора в один файл   -  person Alkesh_IT    schedule 03.03.2014
comment
@Alkesh_IT: Нет, это не вывод минимума и максимума. После минимума и максимума я тоже применяю некоторые уравнения. После этого я получаю результат выше. Мне нужно объединить этот результат.   -  person USB    schedule 03.03.2014
comment
Есть ли способ получить доступ к разным ключам в Reducer в tym и передать значение каждого ключа в виде одной строки?   -  person USB    schedule 03.03.2014
comment
Понятия не имею, но может быть это невозможно из-за разделения записей.   -  person Alkesh_IT    schedule 03.03.2014


Ответы (1)


Используя цепочку MapReduce, вы можете выполнить это

напишите вывод редуктора в одну строку, используя текстовый тип Like

0.62,0.38,0.9
0.24,0.59,0.1

и снова выполните mapreduce для выходного файла первого MapReduce.

public void map(Text key, Text value,OutputCollector<Text, Text> output,
Reporter reporter) throws IOException {
  String temp=new String(value);
  String token[]=temp.split(",");
  output.collect(new Text("max"),new text(token[0]));
  output.collect(new Text("min"),new text(token[1]));
  output.collect(new Text("result"),new text(token[2]));
}

public void reduce(Text key, Iterator<Text> values,
    OutputCollector<Text, Text> output, Reporter reporter)
    throws IOException {
StringBuffer sb=new StringBuffer();
while (values.hasNext())
   sb.append(values.next().toString() + ",");
output.collect(new Text(""),new Text(sb.toString()))



}
person Alkesh_IT    schedule 03.03.2014
comment
Но этот вывод отличается от моего ожидания. Я пытаюсь получить вывод как 0,62,0,24,0,5,0,5 \n 0,38,0,59,1,0,0,0 \n 0,9,0,1,0,2,0,3 \n - person USB; 03.03.2014
comment
Но здесь 1-я строка - это ключ 1, а 2-я строка - это ключ 2, как получить его транспонирование. Т.е. key1,key2 \nkey1,key2 - person USB; 03.03.2014