前提准备:

1.hadoop安装运行正常。Hadoop安装配置请参考:Ubuntu下 Hadoop 1.2.1 配置安装

2.集成开发环境正常。集成开发环境配置请参考 :Ubuntu 搭建Hadoop源码阅读环境

MapReduce编程实例:

MapReduce编程实例(一),详细介绍在集成环境中运行第一个MapReduce程序 WordCount及代码分析

MapReduce编程实例(二),计算学生平均成绩

MapReduce编程实例(三),数据去重

MapReduce编程实例(四),排序

MapReduce编程实例(五),MapReduce实现单表关联

 
 
多表关联
描述:
两张表关联,如下:
左表:
factoryname address
BMW Factory 2
Benz Factory 3
Voivo Factory 4
LG Factory 5
 
右表:
addressID addressname
2 Beijing
3 Guangzhou
4 Shenzhen
5 Sanya
 
根据addressID关联求出factoryname-address表。很明显,左右关联即可,和单表关联一样。不多作表述,有需要可以查看单表关联的分析。
 
  1. package com.t.hadoop;
  2. import java.io.IOException;
  3. import java.util.ArrayList;
  4. import java.util.List;
  5. import org.apache.hadoop.conf.Configuration;
  6. import org.apache.hadoop.fs.Path;
  7. import org.apache.hadoop.io.IntWritable;
  8. import org.apache.hadoop.io.Text;
  9. import org.apache.hadoop.mapreduce.Job;
  10. import org.apache.hadoop.mapreduce.Mapper;
  11. import org.apache.hadoop.mapreduce.Reducer;
  12. import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
  13. import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
  14. import org.apache.hadoop.util.GenericOptionsParser;
  15. /**
  16. * 多表排序
  17. * @author daT dev.tao@gmail.com
  18. *
  19. */
  20. public class MTJoin {
  21. public static int times = 1;
  22. public static class MTMapper extends Mapper<Object, Text, Text, Text>{
  23. @Override
  24. protected void map(Object key, Text value, Context context)
  25. throws IOException, InterruptedException {
  26. String relation = new String();
  27. String line = value.toString();
  28. if(line.contains("factoryname")||line.contains("addressID")) return;
  29. int i = 0;
  30. while(line.charAt(i)<'0'||line.charAt(i)>'9'){
  31. i++;
  32. }
  33. if(i>0){//左表
  34. relation = "1";
  35. context.write(new Text(String.valueOf(line.charAt(i))),new Text(relation + line.substring(0,i-1)));
  36. }else{//右表
  37. relation = "2";
  38. context.write(new Text(String.valueOf(line.charAt(i))),new Text(relation +line.substring(i+1)));
  39. }
  40. }
  41. }
  42. public static class MTReducer extends Reducer<Text, Text, Text, Text>{
  43. @Override
  44. protected void reduce(Text key, Iterable<Text> value,Context context)
  45. throws IOException, InterruptedException {
  46. if(times==1){
  47. context.write(new Text("factoryName"), new Text("Address"));
  48. times ++;
  49. }
  50. int factoryNum = 0;
  51. int addressNum = 0;
  52. String[] factorys = new String[10];
  53. String[] addresses = new String[10];
  54. for(Text t:value){
  55. if(t.charAt(0)=='1'){//左表
  56. factorys[factoryNum]=t.toString().substring(1);
  57. factoryNum++;
  58. }else{//右表
  59. addresses[addressNum]=t.toString().substring(1);
  60. addressNum++;
  61. }
  62. }
  63. for(int i = 0;i<factoryNum;i++){
  64. for(int j=0;j<addressNum;j++){
  65. context.write(new Text(factorys[i]), new Text(addresses[j]));
  66. }
  67. }
  68. }
  69. }
  70. public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException{
  71. Configuration conf = new Configuration();
  72. String[] otherArgs = new GenericOptionsParser(conf,args).getRemainingArgs();
  73. if(otherArgs.length<2){
  74. System.out.println("Parameters error");
  75. System.exit(2);
  76. }
  77. Job job =new Job(conf,"MTjoin");
  78. job.setJarByClass(MTJoin.class);
  79. job.setMapperClass(MTMapper.class);
  80. job.setReducerClass(MTReducer.class);
  81. job.setOutputKeyClass(Text.class);
  82. job.setOutputValueClass(Text.class);
  83. FileInputFormat.addInputPath(job, new Path(otherArgs[0]));
  84. FileOutputFormat.setOutputPath(job, new Path(otherArgs[1]));
  85. System.exit(job.waitForCompletion(true)?0:1);
  86. }
  87. }
输出结果:
factoryName Address
BMW Factory Beijing
Benz Factory Guangzhou
Voivo Factory Shenzhen
LG Factory Sanya
 
欢迎同学们多多交流~

MapReduce编程实例6的更多相关文章

  1. MapReduce编程实例5

    前提准备: 1.hadoop安装运行正常.Hadoop安装配置请参考:Ubuntu下 Hadoop 1.2.1 配置安装 2.集成开发环境正常.集成开发环境配置请参考 :Ubuntu 搭建Hadoop ...

  2. MapReduce编程实例4

    MapReduce编程实例: MapReduce编程实例(一),详细介绍在集成环境中运行第一个MapReduce程序 WordCount及代码分析 MapReduce编程实例(二),计算学生平均成绩 ...

  3. MapReduce编程实例3

    MapReduce编程实例: MapReduce编程实例(一),详细介绍在集成环境中运行第一个MapReduce程序 WordCount及代码分析 MapReduce编程实例(二),计算学生平均成绩 ...

  4. MapReduce编程实例2

    MapReduce编程实例: MapReduce编程实例(一),详细介绍在集成环境中运行第一个MapReduce程序 WordCount及代码分析 MapReduce编程实例(二),计算学生平均成绩 ...

  5. 三、MapReduce编程实例

    前文 一.CentOS7 hadoop3.3.1安装(单机分布式.伪分布式.分布式 二.JAVA API实现HDFS MapReduce编程实例 @ 目录 前文 MapReduce编程实例 前言 注意 ...

  6. hadoop2.2编程:使用MapReduce编程实例(转)

    原文链接:http://www.cnblogs.com/xia520pi/archive/2012/06/04/2534533.html 从网上搜到的一篇hadoop的编程实例,对于初学者真是帮助太大 ...

  7. MapReduce编程实例

    MapReduce常见编程实例集锦. WordCount单词统计 数据去重 倒排索引 1. WordCount单词统计 (1) 输入输出 输入数据: file1.csv内容 hellod world ...

  8. hadoop之mapreduce编程实例(系统日志初步清洗过滤处理)

    刚刚开始接触hadoop的时候,总觉得必须要先安装hadoop集群才能开始学习MR编程,其实并不用这样,当然如果你有条件有机器那最好是自己安装配置一个hadoop集群,这样你会更容易理解其工作原理.我 ...

  9. Hadoop--mapreduce编程实例1

    前提准备: 1.hadoop安装运行正常.Hadoop安装配置请参考:Ubuntu下 Hadoop 1.2.1 配置安装 2.集成开发环境正常.集成开发环境配置请参考 :Ubuntu 搭建Hadoop ...

随机推荐

  1. DataBindings的用法

    在C#操作数据库过程中,针对一般的文本控件,比如TextBox,Label等,我们赋值直接使用类似TextBox.Text=****的方式来进行,这种方式从某种意义上来说的确是最简便的方式,但是对于复 ...

  2. C#模拟MSN窗体抖动

    C#模拟MSN窗体抖动 窗体抖动是件很有意思的事情,就让我们看看一起来看看它的原理吧. 其实是生成随机数,然后改变Form的左上角的坐标.我用的是循环来弄得,其实可以用timer来控制. 我把抖动分成 ...

  3. SQL OUTER JOIN

    When we want to select out all the record from two table, no matter it's present at second table or ...

  4. 使用HTML5的两个api,前端js完成图片压缩

    主要用了两个html5的 API,一个file,一个canvas,压缩主要使用cnavas做的,file是读取文件,之后把压缩好的照片放入内存,最后内存转入表单下img.src,随着表单提交. 照片是 ...

  5. Java程序实现密钥库的维护

    1 Java程序列出密钥库所有条目 import java.util.*; import java.io.*; import java.security.*; public class ShowAli ...

  6. vue - router 起步

    官方API:https://router.vuejs.org/zh/guide/#javascript vue-cli for index.js export default new Router({ ...

  7. ES6 import 循环加载

    1.示例 (1)a.js import {bar} from './b'; console.log('a.mjs'); console.log(bar); export let foo = 'foo' ...

  8. GNU C中的零长度数组

    http://blog.csdn.net/ssdsafsdsd/article/details/8234736 在标准C和C++中,长度为0的数组是被禁止使用的.不过在GNU C中,存在一个非常奇怪的 ...

  9. javascript&jquery 判断滚动到页面底部

      js 判断滚动到页面底部 CreateTime--2018年4月14日10:13:07 Author:Marydon 1.使用场景: 滚动到屏幕底部,触发加载分页数据请求(qq空间,手机端) 2. ...

  10. 【MySQL锁】MySQL悲观锁和乐观锁概念

    悲观锁与乐观锁是两种常见的资源并发锁设计思路,也是并发编程中一个非常基础的概念.本文将对这两种常见的锁机制在数据库数据上的实现进行比较系统的介绍. 悲观锁(Pessimistic Lock) 悲观锁的 ...