问题:求震级>6的地震总数
要求:map reduce job分开写
以上部分数据代表时刻,震级,经度,纬度,深度,地区。
问题:求震级>6的地震总数
要求:map reduce job分开写
针对你的地震数据,我写的代码解决方案如下,望采纳:
Map阶段代码:
import java.io.IOException;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;
public class EarthquakeMapper extends Mapper<LongWritable, Text, IntWritable, IntWritable> {
private static final IntWritable ONE = new IntWritable(1);
@Override
public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
// 解析地震数据
String[] data = value.toString().split(",");
float magnitude = Float.parseFloat(data[1]);
// 如果震级大于6,输出(1,1)
if (magnitude > 6) {
context.write(ONE, ONE);
}
}
}
Reduce阶段代码:
import java.io.IOException;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.mapreduce.Reducer;
public class EarthquakeReducer extends Reducer<IntWritable, IntWritable, IntWritable, IntWritable> {
@Override
public void reduce(IntWritable key, Iterable<IntWritable> values, Context context)
throws IOException, InterruptedException {
// 计数器初始化为0
int count = 0;
// 遍历所有(1,1)的二元组,计数器加1
for (IntWritable value : values) {
count += value.get();
}
// 输出震级大于6的地震的总数
context.write(key, new IntWritable(count));
}
}