0

我正在尝试处理一个 csv 文件。 In map()我将把每一列作为一个值发送给reducer。 In 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

任何建议

4

1 回答 1

1

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

使用 Text 类型在单行中编写 reducer 输出 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()))



}
于 2014-03-03T08:29:45.457 回答