以行的形式从reducer发出列数据

slmsl1lt  于 2021-06-04  发布在  Hadoop
关注(0)|答案(1)|浏览(394)

我正在尝试处理csv文件。 In map() 我将把每一列作为一个值发送给reducer。 In reducer 我将找到最小值和最大值,并进一步处理。处理后,我需要上下文。写的值。但试图在一个特定的方式输出。
在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

是否有可能在每次迭代中处理reducer中的每个不同键

key1value1,key2value1,key3value1
key1value2,key2value2,key3value2

有什么建议吗

tzdcorbm

tzdcorbm1#

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

}

相关问题