mapduce java编写实现统计各性别的人数及他们的姓名—>(key:性别;value:count:xx,names:x1,x2,
时间: 2024-02-25 07:53:53 浏览: 72
好的,下面为您提供使用 Java 实现 MapReduce 统计各性别的人数及他们的姓名的代码。
首先,我们需要定义 Map 函数和 Reduce 函数的类,并实现它们的 map() 和 reduce() 方法。
Map 函数的实现如下所示:
```
public static class Map extends Mapper<LongWritable, Text, Text, TextArrayWritable> {
private final static Text one = new Text("1");
public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
String[] fields = value.toString().split(",");
String gender = fields[1].trim();
String name = fields[0].trim();
TextArrayWritable data = new TextArrayWritable(new String[]{one.toString(), name});
context.write(new Text(gender), data);
}
}
```
Reduce 函数的实现如下所示:
```
public static class Reduce extends Reducer<Text, TextArrayWritable, Text, TextArrayWritable> {
public void reduce(Text key, Iterable<TextArrayWritable> values, Context context) throws IOException, InterruptedException {
int count = 0;
List<String> names = new ArrayList<String>();
for (TextArrayWritable val : values) {
String[] fields = val.toStrings();
count += Integer.parseInt(fields[0]);
names.add(fields[1]);
}
TextArrayWritable result = new TextArrayWritable(new String[]{
Integer.toString(count),
StringUtils.join(names, ",")
});
context.write(key, result);
}
}
```
在 Map 函数中,我们首先从输入数据中提取出性别和姓名两个字段,然后将姓名和计数器 1 组成一个 TextArrayWritable 对象,并将性别作为键,TextArrayWritable 对象作为值输出。
在 Reduce 函数中,我们遍历每个键对应的所有值,将计数器累加起来,并将姓名记录到一个列表中。最后,我们将累加的计数和姓名列表一起输出。
最后,我们还需要编写一个主程序来启动 MapReduce 作业,并设置输入和输出路径。主程序的实现如下所示:
```
public static void main(String[] args) throws Exception {
Configuration conf = new Configuration();
Job job = Job.getInstance(conf, "gender count");
job.setJarByClass(GenderCount.class);
job.setMapperClass(Map.class);
job.setReducerClass(Reduce.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(TextArrayWritable.class);
job.setInputFormatClass(TextInputFormat.class);
job.setOutputFormatClass(TextOutputFormat.class);
FileInputFormat.addInputPath(job, new Path(args[0]));
FileOutputFormat.setOutputPath(job, new Path(args[1]));
job.waitForCompletion(true);
}
```
在主程序中,我们首先创建一个 Job 对象,并将 Map 函数和 Reduce 函数的类设置为该 Job 对象的 Mapper 和 Reducer。然后,我们还需要设置输入和输出的数据格式、输入和输出的路径等信息。最后,我们启动 MapReduce 作业并等待其完成。
以上就是使用 Java 实现 MapReduce 统计各性别的人数及他们的姓名的全部代码。希望对您有所帮助!
阅读全文