大数据课程——MapReduce编程综合应用(1)
实验内容以及要求
现有大约500万条搜索引擎产生的记录,数据格式如下:
每一行包含6个字段:
字段1代表数据产生的时间;
字段2代表用户,即UID;
字段3代表用户搜索关键词;
字段4代表URL超链接在返回结果中的排名;
字段5代表用户单击超链接的顺序号;
字段6代表用户单击的URL超链接的地址。
请利用MapReduce框架,编写程序实现如下功能:
(1)统计用户数量
(2)统计搜索次数在20次及以上的用户UID及搜索次数
(3)你自己想到的其他功能,并编程实现。
1、统计用户数量
实现思路
- Map阶段首先分割记录,所有字段存储为一个字符串数组。随后将字段2即用户UID作为输出key,输出value不重要,随意填写即可。
- Redcue阶段,将输入key作为输出value。用一个静态全局IntWritable变量作为计数器,对每一条输入的key-value对进行编号、计数,并作为输出key即可。
以上思路即可实现统计用户数量的功能了(最后一位用户的编号即为用户总数)。
Map代码
import org.apache.hadoop.io.*;
import org.apache.hadoop.mapreduce.*;
import java.io.IOException;
/**
* @author: 冰冷灬泡面
* @date: 2021/3/29 16:35
* @description:
* @modifiedBy:
*/
public class StatisticMapper extends Mapper<Object, Text, Text, IntWritable> {
private static final IntWritable one = new IntWritable(1);
private Text username = new Text();
@Override
protected void map(Object key, Text value, Mapper<Object, Text, Text, IntWritable>.Context context) throws IOException, InterruptedException {
//分割字符串
String[] strList = value.toString().split("\t");
//将字段2作为输出key
this.username.set(strList[1]);
context.write(this.username, one);
}
}
Reduce代码
impo