根据“好友关系.txt”数据,利用Hadoop平台,实现好友推荐与可视化显示。 要求:通过MapReduce分析两人是否认识,并推荐为好友。
(1)推荐者和被推荐者一定有一个或多个相同的好友
(2)全局去寻找好友列表中两两关系
(3)统计两两关系出现次数
(4)加载Hbase、Hive等软件,并说明
API
(1)map:按好友列表输出两两关系
(2)reduce:对两两关系进行求和

Hadoop:好友推荐
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
13条回答 默认 最新
关注
引自免费微信小程序:皆我百晓生
要实现基于Hadoop平台的好友推荐系统,我们可以通过MapReduce框架来处理大量用户的好友关系数据,找出共同好友最多的潜在好友推荐对。下面是一个详细的步骤和代码示例,用于完成这个任务。
步骤 1: MapReduce Job 设计
Mapper
Mapper的输入是用户及其好友列表。Mapper的任务是将每一对可能的好友组合输出,作为键值对(<UserA, UserB>, 1)的形式,其中UserA和UserB都是用户ID。为了确保每个组合只计算一次,可以确保UserA的ID小于UserB的ID。
import java.io.IOException; import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Mapper; public class FriendRecommendationMapper extends Mapper<Object, Text, Text, IntWritable> { private final static IntWritable one = new IntWritable(1); private Text word = new Text(); public void map(Object key, Text value, Context context) throws IOException, InterruptedException { String[] parts = value.toString().split("\t"); String userId = parts[0]; String[] friends = parts[1].split(","); for (int i = 0; i < friends.length; i++) { for (int j = i + 1; j < friends.length; j()) { if (friends[i].compareTo(friends[j]) < 0) { word.set(friends[i] + "," + friends[j]); } else { word.set(friends[j] + "," + friends[i]); } context.write(word, one); } } } }
Reducer
Reducer接收来自Mapper的键值对,对于每个唯一的键(即用户对),它将计算这些键出现的总次数,这代表了两个用户之间共享的朋友数量。
import java.io.IOException; import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Reducer; public class FriendRecommendationReducer extends Reducer<Text,IntWritable,Text,IntWritable> { private IntWritable result = new IntWritable(); public void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException { int sum = 0; for (IntWritable val : values) { sum += val.get(); } result.set(sum); context.write(key, result); } }
步骤 2: Hadoop Job 设置
在实际环境中,你需要设置一个Hadoop Job来运行上述Mapper和Reducer。这包括指定输入和输出路径,以及配置Job参数。
import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Job; import org.apache.hadoop.mapreduce.lib.input.FileInputFormat; import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat; public class FriendRecommendationDriver { public static void main(String[] args) throws Exception { Configuration conf = new Configuration(); Job job = Job.getInstance(conf, "friend recommendation"); job.setJarByClass(FriendRecommendationDriver.class); job.setMapperClass(FriendRecommendationMapper.class); job.setReducerClass(FriendRecommendationReducer.class); job.setOutputKeyClass(Text.class); job.setOutputValueClass(IntWritable.class); FileInputFormat.addInputPath(job, new Path(args[0])); FileOutputFormat.setOutputPath(job, new Path(args[1])); System.exit(job.waitForCompletion(true) ? 0 : 1); } }
步骤 3: 使用HBase 或 Hive
完成MapReduce作业后,结果可以存储在HBase中以供实时查询,或者导入到Hive中进行更复杂的SQL查询和分析。
加载到HBase
使用HBase的
Put
操作将结果写入表中。加载到Hive
创建一个Hive表并使用
LOAD DATA INPATH
命令将结果文件加载到Hive表中。结果可视化
最后,可以使用任何可视化工具(如Tableau、Gephi或自定义Web应用)来展示推荐的好友关系,通常以图形网络的形式展示。
以上代码和步骤应帮助你构建一个基于Hadoop的好友推荐系统。注意,实际部署时需要根据你的Hadoop集群配置和具体需求调整代码和参数。
解决 无用评论 打赏 举报 编辑记录