设为首页 加入收藏

TOP

尚学堂大数据学习笔记(五)MapReduce简单案例2:好友推荐 FOF
2019-02-11 01:03:22 】 浏览:37
Tags:学堂 数据 学习 笔记 MapReduce 简单 案例 好友 推荐 FOF
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/l1336037686/article/details/86931608

1. 需求

推荐可能认识的好友
在这里插入图片描述

初始数据集

tom hello hadoop cat
world hadoop hello hive
cat tom hive
mr hive hello
hive cat hadoop world hello mr
hadoop tom hive world
hello tom world hive mr

在这里插入图片描述
在这里插入图片描述
分为直接关系(0)与间接关系(1)计算

2. 具体代码

2.1 MyFOF.java

/**
 * Client
 * @author LGX
 *
 */
public class MyFOF {
	public static void main(String[] args) throws Exception {
		Configuration conf = new Configuration(true);
		Job job = Job.getInstance(conf);
		
		job.setJobName("analyse-fof");
		job.setJarByClass(MyFOF.class);
		
		//Input Output
		Path inputPath = new Path("/data/FOF.txt");
		FileInputFormat.addInputPath(job, inputPath);
		
		Path outputPath = new Path("/data/analyse/");
		if(outputPath.getFileSystem(conf).exists(outputPath)) {
			outputPath.getFileSystem(conf).delete(outputPath, true);
		}
		FileOutputFormat.setOutputPath(job, outputPath );
		
		//MapTask
		job.setMapperClass(FMapper.class);
		job.setMapOutputKeyClass(Text.class);
		job.setMapOutputValueClass(IntWritable.class);
		
		//RedcuceTask
		job.setReducerClass(FReducer.class);
		
		job.waitForCompletion(true);
		
	}
}

2.2 FMapper.java

/**
 * 
 * @author LGX
 *
 */
public class FMapper extends Mapper<LongWritable, Text, Text, IntWritable>{
	private Text mkey = new Text();
	private IntWritable mval = new IntWritable();
	
	@Override
	public void map(LongWritable key, Text value, Mapper<LongWritable ,Text ,Text, IntWritable>.Context context) throws IOException, InterruptedException{

		String [] strs=StringUtils.split(value.toString(),' ');
		//如果是0代表为直接关系不作推荐,如果为1代表是间接关系,需要被推荐。
		for ( int i=1;i<strs.length;i++){
			mkey.set(getFOF(strs[0],strs[i]));
			mval.set(0);
			
			context.write(mkey,mval);
			
			for(int j = i+1;j<strs.length;j++){
				mkey.set(getFOF(strs[i],strs[j]));
				mval.set(1);
				context.write(mkey,mval);
			}
			
		}
	}
 
	private static String getFOF(String s1, String s2) {
		if(s1.compareTo(s2) > 0){
			return s1 + " " + s2;
		}else{
			return s2 + " " + s1;
		}
 
	}
}

2.3 FReducer.java

public class FReducer extends Reducer<Text, IntWritable, Text, IntWritable>{
 
	IntWritable rval = new IntWritable();
	
	@Override
	protected void reduce(Text key, Iterable<IntWritable> values,
			Reducer<Text, IntWritable, Text, IntWritable>.Context context) throws IOException, InterruptedException {
		
		int flg =0;
		int sum=0;
		for (IntWritable value : values) {
			if(value.get() == 0){
				flg = 1;
			}
			sum += value.get();
		}
		if(flg == 0){
			rval.set(sum);
			context.write(key, rval);
		}
	}
}

3. 执行与结果

将项目打成jar包上传到hadoop集群上执行
执行结果:

hadoop cat	2
hello cat	2
hello hadoop	3
mr cat	1
mr hadoop	1
tom hive	3
tom mr	1
world cat	1
world mr	2
world tom	2

cat 与 hadoop之间有两个共同好友
cat 与 hello 之间有两个共同好友


编程开发网
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Hive入门-面向产品的Hive教程 下一篇Hive学习-Hive基本操作(建库、建..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

array(4) { ["type"]=> int(8) ["message"]=> string(24) "Undefined variable: jobs" ["file"]=> string(32) "/mnt/wp/cppentry/do/bencandy.php" ["line"]=> int(214) }