从reducer中将列数据作为一行发送

时间:2014-03-03 05:28:06

标签: java hadoop mapreduce reducers

我正在尝试处理csv文件。 In map()我将每列作为值发送给reducer。 In reducer我将找到最小值和最大值以及进一步处理。处理后我需要上下文。写入值。但是尝试以特定方式输出。

在reducer中我正在处理每一列,但我需要输出整个row 即col1的值,col2的值,col3的值,col4的值。

从reducer处理后的示例数据

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

是否可以为每次迭代处理reducer中的每个不同键

key1value1,key2value1,key3value1
key1value2,key2value2,key3value2

任何建议

1 个答案:

答案 0 :(得分:1)

使用MapReduce链接,您可以执行此操作

使用文本类型在单行中写入reducer输出 喜欢

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()))



}