大数据有很多的经典算法,如最常见的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. 将PDF Expert设置为默认打开程序的操作步骤
  3. 如何设置电脑锁屏时间_电脑如何设置多屏显示?多屏显示的设置方法
  4. Java机器学习库ML之十模型选择准则AIC和BIC
  5. 设计模式学习(六)结构型模式初步了解
  6. KNN算法与线性分类器
  7. Mongodb 查询时间类型
  8. three.js glb 多个_直降7.1万元 奔驰GLB开始“大甩卖”
  9. c 语言是一种以解释方式实现的高级语言,高级语言按照计算机执行方式不同可以分为哪两类?它们的执行方式有什么不同,请进行概要说明。...
  10. 《iPad开发从入门到精通》——6.2节系统主界面
  11. 纯c++实现之滚动窗口
  12. vscode 开发maven项目(springboot项目)
  13. 计算机教务管理系统ER图,医院病房管理系统ER图
  14. PV、EV、AC、BAC、EAC、ETC等的含义及计算公式
  15. envi5.6处理gf3(SAR)详细过程记录
  16. 当下移动互联网的6个泡沫,快要破了!
  17. 卸载mysql5.6.34_完全卸载linux的MySQL
  18. java排他_排他文件锁实现(Java版本)
  19. 企立方:拼多多开店能不能赚钱
  20. Homebrew - 安装与使用

热门文章

  1. vue3学习(引入轮播图插件)
  2. 有什么手机软件可以修视频?常用3款视频处理软件推荐给你
  3. 中电金信源启数据资产管理平台助力金融机构加速数据资产化过程(下)
  4. Android 数据库查看工具Stetho使用介绍
  5. php HTML转义,反转义
  6. python闲鱼机器人_自动化篇 - 躺着收钱!闲鱼自动发货机器人来啦~
  7. python3实现简单的朗读器脚本(GUI)
  8. SCWCD乱乱的资源
  9. 2011 IT行业薪酬
  10. Activiti7工作流引擎:进阶篇(七) 调用子流程 CallActivityTask