大数据有很多的经典算法,如最常见的worldcount算法,不过今天我要给大家展示的是,大数据嵌套MR的经典算法:共同好友

pom如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><!-- 这一块用你自己的 --><groupId>com.wy</groupId><artifactId>FOBJ</artifactId><packaging>pom</packaging><version>1.0-SNAPSHOT</version><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>RELEASE</version></dependency><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-core</artifactId><version>2.8.2</version></dependency><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-common</artifactId><version>2.7.2</version></dependency><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-client</artifactId><version>2.7.2</version></dependency><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-hdfs</artifactId><version>2.7.2</version></dependency><!--这个依赖可以不要,要的话把下面的路径变成自己的JDK安装路径,这是我之前电脑的JDK出问题了,才用的这个--><dependency><groupId>jdk.tools</groupId><artifactId>jdk.tools</artifactId><version>1.8</version><scope>system</scope><systemPath>C:/Program Files/Java/jdk1.8.0_211/lib/tools.jar</systemPath></dependency></dependencies>
</project>

代码如下:

package com.wy;import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.NullWritable;
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;import java.io.IOException;/*样例数据:A:B,C,D,F,E,OE:B,C,D,M,L共同好友说的是任意两人之间他们的共同好友有谁*/public class FriendJoinDriver {/*** map1将数据重构将每个人的好友拆分出来*/public static class FriendJoin1Mapper extends Mapper<LongWritable,Text,Text,Text> {Text keyNew=new Text();//保存朋友Text valNew=new Text();//保存共同人@Overrideprotected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {String[] split = value.toString().split(":");valNew.set(split[0]);String[] split1 = split[1].split(",");//朋友for (String c:split1) {keyNew.set(c);context.write(keyNew,valNew);}}}/***map1出来的数据会被分组,而分组之后的结果两两组合*恰好可以构成目标结果的一对数据*/public static class FriendJoin1Reduce extends Reducer<Text,Text,Text,Text>{//A:B,C,D,F,E,O这里会将所有共同人A的所有朋友给得出Text keyNew=new Text();@Overrideprotected void reduce(Text friend, Iterable<Text> user, Context context) throws IOException, InterruptedException {ArrayList userList=new ArrayList();for (Text c:user) {userList.add(c.toString());}/*这些用户的顺序进行排序这里是个重点:必须排序不然对于我们人来说A-B和B-A说的是两个人一种关系但是程序中由于字符串是首位开始依次码值比较所有如果不排序A-B和B-A对于程序来说将是四个人两种关系*/Collections.sort(userList);//根据得到的规则将所有可能的22排序以及共同基友输出for (int i = 0; i < userList.size() -1; i++) {for (int j = i+1; j <userList.size() ; j++) {String keyP=userList.get(i)+"->"+userList.get(j);keyNew.set(keyP);context.write(keyNew,friend);}}}}/**第一个MR之后其实结果数据已成,只不过还是单独一个一个的我们需要用第二个MR组合就好了*/public static class FriendJoin2Mapper extends  Mapper<LongWritable,Text,Text,Text>{Text keyNEW=new Text();Text valueNEW=new Text();@Overrideprotected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {String[] split = value.toString().split("\t");keyNEW.set(split[0]);valueNEW.set(split[1]);context.write(keyNEW,valueNEW);}}public static class FriendJoin2Reduce extends Reducer<Text,Text,Text,Text>{Text outValue=new Text();@Overrideprotected void reduce(Text key, Iterable<Text> values, Context context) throws IOException, InterruptedException {StringBuffer buffer=new StringBuffer();for (Text c:values ) {buffer.append(c.toString()).append("\t");}outValue.set(buffer.toString());context.write(key,outValue);}}public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {Configuration  cfg = new Configuration() ;//获取到任务Job job = Job.getInstance(cfg) ;job.setJarByClass(FriendJoinDriver.class);//对输入输出参数设置job.setOutputKeyClass(Text.class);job.setOutputValueClass(Text.class);job.setMapOutputKeyClass(Text.class);job.setMapOutputValueClass(Text.class);//设置map reduce类job.setMapperClass(FriendJoin1Mapper.class);job.setReducerClass(FriendJoin1Reduce.class);//设置输入输出路径FileInputFormat.setInputPaths(job,new Path("C:\\HadoopTeacher\\data\\data10\\input"));FileOutputFormat.setOutputPath(job, new Path("C:\\HadoopTeacher\\data\\data10\\input1"));boolean b = job.waitForCompletion(true);if(b==true){Job job1 = Job.getInstance(cfg) ;job1.setJarByClass(FriendJoinDriver.class);//对输入输出参数设置job1.setOutputKeyClass(Text.class);job1.setOutputValueClass(Text.class);job1.setMapOutputKeyClass(Text.class);job1.setMapOutputValueClass(Text.class);//设置map reduce类job1.setMapperClass(FriendJoin2Mapper.class);job1.setReducerClass(FriendJoin2Reduce.class);//设置输入输出路径FileInputFormat.setInputPaths(job1,new Path("C:\\HadoopTeacher\\data\\data10\\input1"));FileOutputFormat.setOutputPath(job1, new Path("C:\\HadoopTeacher\\data\\data10\\input11"));boolean b1 = job1.waitForCompletion(true);System.exit( b1== true?0:-1);}}
}

大数据经典算法--共同好友算法相关推荐

  1. 机器学习及大数据经典算法笔记汇总

    机器学习及大数据经典算法笔记汇总 一.总结 二.机器学习及大数据算法 机器学习及大数据经典算法笔记汇总 一.总结 前面的博文,介绍了很多TensorFlow 以及 DeepLeaning 的算法.这里 ...

  2. 大数据时代先要满足算法而不是客户的需求

    <如何免费获取线上流量>系列课程之一 (注:以下内容是根据张进老师在2020年12月10号在善书院举办的一期企业经营沙龙上,所做的<企业如何获取线上的免费流量>演讲整理出的部分 ...

  3. 大数据预测的基本原理_大数据需要掌握的基本算法

    大数据需要会的基本算法 前言 数学就像一条章鱼,它有触手可以触及到几乎每个学科上面.虽然大部分人在上学的时候有系统的学习,但都没有进行深入的研究和运用,只是拿来拓展自己的思维逻辑.但是如果你想从事数学 ...

  4. 2018年新春报喜!热烈祝贺王家林大咖大数据经典传奇著作《SPARK大数据商业实战三部曲》 畅销书籍 清华大学出版社发行上市!

    2018年新春报喜!热烈祝贺王家林大咖大数据经典传奇著作<SPARK大数据商业实战三部曲>畅销书籍 清华大学出版社发行上市! 本书基于Spark 2.2.0新版本,以Spark商业案例实战 ...

  5. 人工智能、大数据的广泛应用,算法推荐如何守好边界

    来源:人民数据 本文共2000字,建议阅读5分钟 人工智能.大数据的广泛应用,给互联网平台带来了自动化的算法技术. 人工智能.大数据的广泛应用,给互联网平台带来了自动化的算法技术.一方面,互联网平台利 ...

  6. 大数据培训技术Kylin核心算法逐层构建算法

    核心算法 Kylin的工作原理就是对数据模型做Cube预计算,并利用计算的结果加速查询: 1)指定数据模型,定义维度和度量: 2)预计算Cube,计算所有Cuboid并保存为物化视图: 预计算过程是K ...

  7. 带你走进微博背后的大数据原理:微博推荐算法

    在介绍微博推荐算法之前,我们先聊一聊推荐系统和推荐算法.有这样一些问题:推荐系统适用哪些场景?用来解决什么问题.具有怎样的价值?效果如何衡量? 推荐系统诞生很早,但真正被大家所重视,缘起于以" ...

  8. 大数据Hadoop学习之——TF-IDF算法实现

    一.算法说明 1.词频TF:是指给定词语在给定文件中出现的次数,一般会做归一化,即除以文件的总词数(注意是分词数,不是字数). TF=词在文章出现次数 / 文章的总词数 2.逆向文件频率IDF:普遍重 ...

  9. 北京内推 | 中国电信总部大数据AI中心招聘计算机视觉算法实习生

    合适的工作难找?最新的招聘信息也不知道? AI 求职为大家精选人工智能领域最新鲜的招聘信息,助你先人一步投递,快人一步入职! 中国电信 中国电信总部云网运营部大数据AI中心(中国电信集团有限公司数字智 ...

最新文章

  1. 自己写一个树形导航菜单
  2. 详解Scala函数也是对象的特性
  3. zigbee定位_基于RFID室内定位技术的解决方案,能满足高精度室内定位吗?
  4. 玉米田(加加强版)【插头dp】
  5. Java 中判断一个字符串是否包含另外一个字符串的方法
  6. nuxt页面跳转_Nuxt.js错误页面跳转可能出现的问题
  7. 安装.net Framework 3.5 SP1非常慢的解决方案
  8. DPM2012学习(二),添加本地磁盘
  9. 两边放动物对战守城的游戏_疯狂动物园小程序游戏:入口
  10. 虚拟机 VMware 16安装教程
  11. 懒人精灵新版图色工具介绍
  12. 谭浩强《C程序设计》(第四版)错误不完全汇集
  13. 中标麒麟7.0操作系统64之修改YUM源
  14. 厦门大学计算机专业,厦门大学计算机科学系专业介绍
  15. LMK04828时钟芯片配置——配置理解
  16. markdown中编辑复杂表格
  17. hdu-5976 Detachment 解题报告(乘法逆元、贪心?)
  18. 冷战 (并查集按秩归并)
  19. 【Reference Reading】MRI引导中子捕获治疗通过上调低密度脂蛋白转运体使用双钆/硼剂靶向肿瘤细胞
  20. b站coderwhy老师_购物首页开发

热门文章

  1. 目前大数据技术平台有很多,主要可以分为哪几类?
  2. c++进阶项目—基于多态的职工管理系统
  3. 固态硬盘接口类型详解 教你如何选择合适的SSD接口
  4. 如何检查文件正在被使用
  5. 【人机交互技术】人脸表情识别技术综述(感觉写的比较简单)
  6. 我的二维码上有新垣结衣老婆哦:)
  7. iOS 状态栏点击事件
  8. 电路设计100个小技巧
  9. java 自定义异常错误编码
  10. 控制领域顶级学术会议有哪些?