MapReduce中两个数据源内的数据做除法源码
时间: 2024-03-27 16:38:57 浏览: 15
MapReduce中两个数据源内的数据做除法,可以通过以下方式实现:
```java
public static class Map extends Mapper<LongWritable, Text, Text, DoubleWritable> {
public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
String[] line = value.toString().split("\t");
// 获取第一个数据源的值
Double a = Double.parseDouble(line[0].trim());
// 获取第二个数据源的值
Double b = Double.parseDouble(line[1].trim());
// 将两个数据源的值做除法
Double c = a / b;
// 将结果输出到reduce中
context.write(new Text("result"), new DoubleWritable(c));
}
}
```
在reduce中,可以通过遍历values计算所有结果的平均值:
```java
public static class Reduce extends Reducer<Text, DoubleWritable, Text, DoubleWritable> {
public void reduce(Text key, Iterable<DoubleWritable> values, Context context) throws IOException, InterruptedException {
Double sum = 0.0;
int count = 0;
for (DoubleWritable value : values) {
sum += value.get();
count++;
}
// 计算平均值
Double avg = sum / count;
// 输出结果
context.write(key, new DoubleWritable(avg));
}
}
```