iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >04.Mapreduce实例——单表join
  • 956
分享到

04.Mapreduce实例——单表join

04.Mapreduce实例——单表join 2017-09-23 22:09:28 956人浏览 猪猪侠
摘要

04.Mapreduce实例——单表join 实验原理 以本实验的buyer1(buyer_id,friends_id)表为例来阐述单表连接的实验原理。单表连接,连接的是左表的buyer_id列和右表的friends_id列,且左表和右表

04.Mapreduce实例——单表join

04Mapreduce实例——单表join

实验原理

以本实验的buyer1(buyer_id,friends_id)表为例来阐述单表连接的实验原理。单表连接,连接的是左表的buyer_id列和右表的friends_id列,且左表和右表是同一个表。因此,在map阶段将读入数据分割成buyer_id和friends_id之后,会将buyer_id设置成key,friends_id设置成value,直接输出并将其作为左表;再将同一对buyer_id和friends_id中的friends_id设置成key,buyer_id设置成value进行输出,作为右表。为了区分输出中的左右表,需要在输出的value中再加上左右表的信息,比如在value的String最开始处加上字符1表示左表,加上字符2表示右表。这样在map的结果中就形成了左表和右表,然后在shuffle过程中完成连接。reduce接收到连接的结果,其中每个key的value-list就包含了"buyer_idfriends_id--friends_idbuyer_id"关系。取出每个key的value-list进行解析,将左表中的buyer_id放入一个数组,右表中的friends_id放入一个数组,然后对两个数组求笛卡尔积就是最后的结果了。

实验步骤

  1. 开启hadoop服务

         Start-all.sh

  1. 建立目录

            mkdir -p /data/mapReduce7

  1. 将buyer1文件上传到该目录下
  2. 上传hadoop2lib文件并解压

         unzip hadoop2lib.zip

  1. hdfs上新建/mymapreduce7/in目录,然后将linux本地/data/mapreduce7目录下的buyer1文件导入到hdfs的/mymapreduce7/in目录中。

         hadoop fs -mkdir -p /mymapreduce7/in 

         hadoop fs -put /data/mapreduce7/buyer1 /mymapreduce7/in

  1. idea中编写Java代码
  2. package mapreduce4;
    import java.io.IOException;
    import java.util.Iterator;
    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;
    public class DanJoin {
        public static class Map extends Mapper{
            public void map(Object key,Text value,Context context)
                    throws IOException,InterruptedException{
                String line = value.toString();
                String[] arr = line.split(",");
                String mapkey=arr[0];
                String mapvalue=arr[1];
                String relationtype=new String();
                relationtype="1";
                context.write(new Text(mapkey),new Text(relationtype+"+"+mapvalue));
                //System.out.println(relationtype+"+"+mapvalue);
                relationtype="2";
                context.write(new Text(mapvalue),new Text(relationtype+"+"+mapkey));
                //System.out.println(relationtype+"+"+mapvalue);
            }
        }
        public static class Reduce extends Reducer{
            public void reduce(Text key,Iterable values,Context context)
                    throws IOException,InterruptedException{
                int buyernum=0;
                String[] buyer=new String[20];
                int friendsnum=0;
                String[] friends=new String[20];
                Iterator ite=values.iterator();
                while(ite.hasNext()){
                    String record=ite.next().toString();
                    int len=record.length();
                    int i=2;
                    if(0==len){
                        continue;
                    }
                    char relationtype=record.charAt(0);
                    if("1"==relationtype){
                        buyer [buyernum]=record.substring(i);
                        buyernum++;
                    }
                    if("2"==relationtype){
                        friends[friendsnum]=record.substring(i);
                        friendsnum++;
                    }
                }
                if(0!=buyernum&&0!=friendsnum){
                    for(int m=0;m                     for(int n=0;n                         if(buyer[m]!=friends[n]){
                                context.write(new Text(buyer[m]),new Text(friends[n]));
                            }
                        }
                    }
                }
            }
        }
        public static void main(String[] args) throws Exception{

            Configuration conf=new Configuration();
            String[] otherArgs=new String[2];
            otherArgs[0]="hdfs://192.168.149.10:9000/mymapreduce7/in/buyer1";
            otherArgs[1]="hdfs://192.168.149.10:9000/mymapreduce7/out";
            Job job=new Job(conf," Table join");
            job.setjarByClass(DanJoin.class);
            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);

        }
    }

 

  1. 将hadoop2lib目录中的jar包,拷贝到hadoop2lib目录下。
  2. 拷贝log4j.properties文件
  3. 运行结果

 

 

 

 

 

 

您可能感兴趣的文档:

--结束END--

本文标题: 04.Mapreduce实例——单表join

本文链接: https://www.lsjlt.com/news/8922.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 04.Mapreduce实例——单表join
    04.Mapreduce实例——单表join 实验原理 以本实验的buyer1(buyer_id,friends_id)表为例来阐述单表连接的实验原理。单表连接,连接的是左表的buyer_id列和右表的friends_id列,且左表和右表...
    99+
    2017-09-23
    04.Mapreduce实例——单表join
  • MapReduce多种join实现的示例分析
    这篇文章将为大家详细讲解有关MapReduce多种join实现的示例分析,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。一、概述   对于RDBMS中的join操...
    99+
    2023-06-03
  • Mysql join联表及id自增实例解析
    join的写法 如果用left join 左边的表一定是驱动表吗?两个表的join包含多个条件的等值匹配,都要写道on还是只把一个写到on,其余写道where部分? create table a(f1 ...
    99+
    2022-05-15
    mysql join联表 id自增
  • HTML表单实例分析
    这篇文章主要介绍了HTML表单实例分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇HTML表单实例分析文章都会有所收获,下面我们一起来看看吧。 <!DOCTYPE...
    99+
    2022-10-19
  • HTML5表单实例分析
    这篇文章主要介绍了HTML5表单实例分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇HTML5表单实例分析文章都会有所收获,下面我们一起来看看吧。 一、表单结构更自由 X...
    99+
    2022-10-19
  • mysql中各种常见join连表查询实例总结
    本文实例讲述了mysql中各种常见join连表查询。分享给大家供大家参考,具体如下: 通常我们需要连接多个表查询数据,以获取想要的结果。 一、连接可以分为三类:   (1) 内连接:join,inner j...
    99+
    2022-10-18
  • JavaScript实现简单表单验证案例
    本文实例为大家分享了JavaScript实现简单表单验证的具体代码,供大家参考,具体内容如下 一.需求分析 要实现的功能: 1.出现如下图所示的内容:(HTML和CSS完成) 2....
    99+
    2022-11-13
  • MySQL单表查询实例详解
    1、准备数据 以下操作将在该表中进行 create table student ( id int unsigned primary key auto_increment, name char(12)...
    99+
    2022-05-21
    mysql单表查询 mysql 查询锁表 mysql查询
  • JavaScript表单验证实例分析
    这篇文章主要介绍了JavaScript表单验证实例分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇JavaScript表单验证实例分析文章都会有所收获,下面我们一起来看看吧。...
    99+
    2022-10-19
  • HTML表单元素实例分析
    今天小编给大家分享一下HTML表单元素实例分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧...
    99+
    2022-10-19
  • python单向链表实例详解
    使用python实现单向链表,供大家参考,具体内容如下 单向链表:是将所有的数据作为一个个节点,将所有的节点链接在一起。每一个节点中又分为: 存储数据区,链接区 存储数据区: 存储具...
    99+
    2022-11-11
  • JavaScript实现表单验证示例
    HTML表单(form)通常用于收集用户信息,例如姓名,电子邮件地址,位置,年龄等。 但是很可能某些用户可能不会输入您期望的数据。HTML表单验证可以通过JavaScript完成。 ...
    99+
    2022-11-13
  • JavaScript实现表单验证案例
    本文实例为大家分享了JavaScript实现表单验证的具体代码,供大家参考,具体内容如下 需求 有如下注册页面,对表单进行校验,如果输入的用户名、密码、手机号符合规则,则允许提交;...
    99+
    2022-11-13
  • JS实现表单验证案例
    本文实例为大家分享了JS实现表单验证案例的具体代码,供大家参考,具体内容如下 1.当输入框失去焦点时,验证输入内容是否符合要求 (1)获取表单输入框(2)绑定 onblur 事件(...
    99+
    2022-11-13
  • vue3element的Form表单用法实例
    目录引言设计目标配置化参数简单自由度实现过程表单项的格式设计v-bind的妙用computed的妙用:实现v-modeluseAttrs的妙用表单验证上传文件代码总结到底应不应该使用...
    99+
    2022-11-13
    vue3 element Form表单 element Form表单用法
  • drupal使用hook_form_alter()修改表单实例
    本文实例讲述了drupal使用hook_form_alter()修改表单的方法。分享给大家供大家参考。具体实现方法如下: 一、根据$form_id可以同时修改多个表单复制代码代码如下:function myuser_fo...
    99+
    2022-06-12
    drupal hook_form_alter() 修改 表单
  • C语言单链表实例分析
    今天小编给大家分享一下C语言单链表实例分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1、移除链表元素链接直达:移除链表元...
    99+
    2023-06-30
  • Java实现跳跃表(skiplist)的简单实例
    跳跃链表是一种随机化数据结构,基于并联的链表,其效率可比拟于二叉查找树(对于大多数操作需要O(log n)平均时间),并且对并发算法友好。基本上,跳跃列表是对有序的链表增加上附加的前进链接,增加是以随机化的方式进行的,所以在列表中的查找可以...
    99+
    2023-05-31
    java 跳跃表 skiplist
  • PHP实现表单数据修改的实例
    在网站开发中,表单是必不可少的组件之一。而在表单的处理过程中,会出现需要修改表单数据的情况。本文将介绍使用PHP实现表单数据修改的实例。创建修改表单页面首先,我们需要创建一个包含要修改数据的表单页面。在该页面中,需要显示需要修改的表单数据,...
    99+
    2023-05-14
  • Vue3+ElementPlus表单组件的封装实例
    目录form文件夹FormItem.tsx在页面中引用总结在系统中,表单作为用户与后端交互的重要传递组件使用频率极高,故对其进行封装是必然的,也是一个编写规范代码的前端程序员必须做的...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作