代码语言
.
CSharp
.
JS
Java
Asp.Net
C
MSSQL
PHP
Css
PLSQL
Python
Shell
EBS
ASP
Perl
ObjC
VB.Net
VBS
MYSQL
GO
Delphi
AS
DB2
Domino
Rails
ActionScript
Scala
代码分类
文件
系统
字符串
数据库
网络相关
图形/GUI
多媒体
算法
游戏
Jquery
Extjs
Android
HTML5
菜单
网页交互
WinForm
控件
企业应用
安全与加密
脚本/批处理
开放平台
其它
【
Java
】
MapReduce实现共同朋友问题
作者:
文杰
/ 发布于
2017/2/7
/
881
package com.duking.mapreduce; import java.io.IOException; import java.util.Set; import java.util.StringTokenizer; import java.util.TreeSet; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Job; import org.apache.hadoop.mapreduce.Mapper; import org.apache.hadoop.mapreduce.Reducer; import org.apache.hadoop.mapreduce.lib.input.FileInputFormat; import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat; import org.apache.hadoop.util.GenericOptionsParser; public class FindFriends { /** * map方法 * @author duking * */ public static class Map extends Mapper<Object, Text, Text, Text> { /** * 实现map方法 */ public void map(Object key, Text value, Context context) throws IOException, InterruptedException { //将输入的每一行数据切分后存到persions中 StringTokenizer persions = new StringTokenizer(value.toString()); //定义一个Text 存放本人信息owner Text owner = new Text(); //定义一个Set集合,存放朋友信息 Set<String> set = new TreeSet<String>(); //将这一行的本人信息存入owner中 owner.set(persions.nextToken()); //将所有的朋友信息存放到Set集合中 while(persions.hasMoreTokens()){ set.add(persions.nextToken()); } //定义一个String数组存放朋友信息 String[] friends = new String[set.size()]; //将集合转换为数组,并将集合中的数据存放到friend friends = set.toArray(friends); //将朋友进行两两组合 for(int i=0;i<friends.length;i++){ for(int j=i+1;j<friends.length;j++){ String outputkey = friends[i]+friends[j]; context.write(new Text(outputkey), owner); } } } } /** * Reduce方法 * @author duking * */ public static class Reduce extends Reducer<Text, Text, Text, Text> { /** * 实现Reduce方法 */ public void reduce(Text key, Iterable<Text> values,Context context) throws IOException, InterruptedException { String commonfriends = ""; for (Text val : values){ if(commonfriends == ""){ commonfriends = val.toString(); }else{ commonfriends = commonfriends + ":" +val.toString(); } } context.write(key,new Text(commonfriends)); } } /** * main * @param args * @throws Exception */ public static void main(String[] args) throws Exception { Configuration conf = new Configuration(); conf.set("mapred.job.tracker", "192.168.60.129:9000"); //指定待运行参数的目录为输入输出目录 String[] otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs(); /* 指定工程目录下的input output为输入输出目录 String[] ioArgs = new String[] {"input", "output" }; String[] otherArgs = new GenericOptionsParser(conf, ioArgs).getRemainingArgs(); */ if (otherArgs.length != 2) { //判断运行参数个数 System.err.println("Usage: Data Deduplication <in> <out>"); System.exit(2); } // set maprduce job name Job job = new Job(conf, "findfriends"); job.setJarByClass(FindFriends.class); // 设置map reduce处理类 job.setMapperClass(Map.class); job.setReducerClass(Reduce.class); // 设置输出类型 job.setOutputKeyClass(Text.class); job.setOutputValueClass(Text.class); //设置输入输出路径 FileInputFormat.addInputPath(job, new Path(otherArgs[0])); FileOutputFormat.setOutputPath(job, new Path(otherArgs[1])); System.exit(job.waitForCompletion(true) ? 0 : 1); } }
试试其它关键字
同语言下
.
List 切割成几份 工具类
.
一行一行读取txt的内容
.
Java PDF转换成图片并输出给前台展示
.
java 多线程框架
.
double类型如果小数点后为零则显示整数否则保留两位小
.
将图片转换为Base64字符串公共类抽取
.
sqlParser 处理SQL(增删改查) 替换schema 用于多租户
.
JAVA 月份中的第几周处理 1-7属于第一周 依次类推 29-
.
java计算两个经纬度之间的距离
.
输入时间参数计算年龄
可能有用的
.
List 切割成几份 工具类
.
一行一行读取txt的内容
.
Java PDF转换成图片并输出给前台展示
.
java 多线程框架
.
double类型如果小数点后为零则显示整数否则保留两位小
.
将图片转换为Base64字符串公共类抽取
.
sqlParser 处理SQL(增删改查) 替换schema 用于多租户
.
JAVA 月份中的第几周处理 1-7属于第一周 依次类推 29-
.
java计算两个经纬度之间的距离
.
输入时间参数计算年龄
文杰
贡献的其它代码
(
20
)
.
身份证验证与获取身份有用信息
.
mybatis模糊查询
.
使用DWZ.CN生成短网址
.
MapReduce实现共同朋友问题
.
检查一个字符是否在一段字符串中
.
IE6 Fixed
.
判断字符串是否能转换为数字
.
检查邮箱是否有新邮件+线程池
.
生成高品质小空间的缩略图
.
用图作提交按钮或超连接
Copyright © 2004 - 2024 dezai.cn. All Rights Reserved
站长博客
粤ICP备13059550号-3