import MyMapReduce.MyReduce;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.LongWritable;
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 java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class MyReduceJoin {
/**
* reduceJoin
* 需求类似于: key为 deptno
*select e.empno,e.ename,d.dname,d.deptno from emp e join dept d on e.deptno=d.deptno;
* 思考,join操作,发生在reduce端,也就是说,我们的key将会关联条件的那个字段。
* 然后,在map端给不同的数据打标记,再在redeuce端进行数据拆分,拼接操作。
*/
//首先 创建内部类
static class mymapper extends Mapper<LongWritable,Text,Text,Text>
{
String v="";
String k="";
@Override
protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
String[] split = value.toString().split(",");
if(split.length>3)//这里是判断员工
{
this.v=split[0]+","+split[1]+","+0;//这里我抓取了 编号 和员工姓名还有 打上了烙印0
this.k=split[7];//不能拿去key吗
}
else //这里抓取了部门编号
{
this.v=split[0]+","+split[1]+","+1;
this.k=split[0];
}
context.write(new Text(k),new Text(v));
// System.out.print(" *** "+k+v);
}
}
static class myReduce extends Reducer<Text,Text,Text,Text>
{
String v = "";
@Override
protected void reduce(Text key, Iterable<Text> values, Context context) throws IOException, InterruptedException {
/*
来个集合 让我们来放些东西
*/
List<String>list=new ArrayList<String>();//这个放员工吧
List<String>list1=new ArrayList<String>();// 这个放部门咯
//key:30 , value: (编号,姓名,0)(部门编号,部门名称,1)
// String[] split = values.toString().split(",");
for(Text t:values)//将数组内的内容遍历出来
{ System.out.println("******"+t);
String[] split = t.toString().split(",");
System.out.println("////////"+split.toString());
if (split[2].equals("0"))//如果数组内的第三个号位为0则为员工
{
list.add(t.toString());
} else {
list1.add(t.toString());
}
}
for(String yuan:list)
{
System.out.println("++++++"+yuan);
for(String bu: list1)
{System.out.println("-------"+bu);
v=(yuan+bu).replace(",0","-").replace(",1","");
context.write(new Text(v),new Text(""));
}
}
}
}
public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {
Job instance = Job.getInstance();//获取实例
Configuration configuration = instance.getConfiguration();//加载配置
Path path=new Path("/home/alwaysdazz/3.txt");
FileSystem fileSystem = FileSystem.get(configuration);
if(fileSystem.exists(path))
{
fileSystem.delete(path,true);
}
instance.setJarByClass(MyReduce.class);
instance.setMapperClass(mymapper.class);
instance.setMapOutputKeyClass(Text.class);
instance.setMapOutputValueClass(Text.class);
instance.setReducerClass(myReduce.class);
instance.setOutputKeyClass(Text.class);
instance.setOutputValueClass(Text.class);
FileInputFormat.setInputPaths(instance,new Path("/home/alwaysdazz/Hadoop/join操作"));
FileOutputFormat.setOutputPath(instance,path);
System.exit(instance.waitForCompletion(true)?0:1);
}
}
相关推荐
2022年TI杯模拟电⼦系统设计专题邀请赛——李萨如图形演示装置
本次装置主要是对输入的正弦信号进行频率变换,并将原输入正弦信号作为 X 轴信号、变换后的正弦信号作为 Y 轴信号,绘制李萨如图形。采用 EK-TM4C123GXL 板卡作为主控;频率变换采用“锁向环+计数器”实现 1-5 倍频的频率变换控制;李萨如图形采用两个 AD通道采集原输入的正弦信号作为 X 轴信号和频率变换后的正弦信号作为 Y 轴信号,绘制李萨如图形。
MapReduce 表连接之Reduce端Join
一:背景 Reduce端连接比Map端连接更为普遍,因为输入的数据不需要特定的结构,但是效率比较低,因为所有数据都必须经过Shuffle过程。 二:技术实现 基本思路 (1):Map端读取所有的文件,并在输出的内容里加上标示,代表数据是从哪个文件里来的。 (2):在reduce处理函数中,按照标识对数据进行处理。 (3):然后根据Key去jo
Qt5.14.2+VS2017开发环境搭建全流程(含插件配置与项目测试)
本文详细介绍了Qt5.14.2与VS2017开发环境的完整搭建流程,包括软件安装、插件配置、环境变量设置以及项目测试。特别针对实际开发中常见的配置问题提供解决方案,帮助C++开发者快速搭建高效的Qt开发环境。
MapReduce表连接操作之Reduce端join
一:背景 Reduce端连接比Map端连接更为普遍,因为输入的数据不需要特定的结构,但是效率比较低,因为所有数据都必须经过Shuffle过程。 二:技术实现 基本思路 (1):Map端读取所有的文件,并在输出的内容里加上标示,代表数据是从哪个文件里来的。 (2):在reduce处理函数中,按照标识对数据进行处理。 (3):然后根据Keyde的join来求出结果直接输出。
Android开发者必看:5分钟搞定MQTT客户端连接EMQX服务器(附完整代码)
本文为Android开发者提供了一份快速实现MQTT客户端连接EMQX服务器的实战指南。通过引入Eclipse Paho SDK,详细讲解了从项目配置、权限申请到核心连接、主题订阅与消息发布的完整流程,并附有即拿即用的Kotlin代码,帮助开发者在物联网应用中高效集成轻量级实时通信功能。
k8s架构、工作流程、集群组件详解
Kubernetes(简称K8s,是因为 k 和 s 之间有八个字符)是一个开源的容器编排平台,用于管理云平台中多个主机上的容器化应用程序。它提供了一种机制,用于自动化部署、扩展和管理容器化应用程序的集群。Kubernetes的目标是让部署容器化应用程序变得简单高效。它提供了应用程序部署、规划、更新和维护的基本机制,同时具备强大的扩展性和可靠性。Kubernetes采用主从设备模型(Master-Slave架构),其中Master节点负责核心的调度、管理和运维任务,而Slave节点负责运行应用程序的容器。
MapReduce 基础案例 之 单表连接 Reduce端 Join 实现
单表连接 单表关联这个实例要求从给出的数据中寻找所关心的数据,它是对原始数据所包含信息的挖掘。典型的为找祖孙关系 本帖为Reduce端Join来实现单表连接 思想 在map端将来源于不同的数据或者是有不同用处的数据打上标签,以便在reduce端接收并连接查找关系。 场景 无论大表小表(无论文件的大小) 优点 解决的业务范围广 缺点 map端到reduce的传输量比较大(且大量为...
QT实现OPCUA服务端客户端(附完整源码)
QT实现OPCUA服务端客户端(附完整源码)
mapreduce实例-Join连接 (reduce Side Join)
public class ReduceSideJoin extends Configured implements Tool { public static class UserJoinMapper extends Mapper { private Text outkey = new Text(); private Text outvalue
OpenCV-Python实战(10)——详解 OpenCV 轮廓检测
在计算机视觉领域,轮廓通常指图像中对象边界的一系列点。因此,轮廓通常描述了对象边界的关键信息,包含了有关对象形状的主要信息,该信息可用于形状分析与对象检测和识别。在本文中,将首次通过简单示例了解轮廓的基本概念,然后通过实际示例来了解如何检测和压缩轮廓,最后利用介绍如何利用图像矩描述检测到的轮廓属性。
寻路最终版哦
相信大家用unity3d寻路的时候,一定会碰到多人
Map-Reduce实现Join 算法(mapreduce侧连接 maponly 连接 map bloomfilter reduce连接) (join二)
refer to http://mysun.iteye.com/blog/1748480 参考以下文章,谈谈如果我自己设计的mapred join 和 maponly join 1.首先mapred join ,map的产物是 key,val (key就是join on的条件eg t1.id = t2.id),val中包含 tag即来自哪个文件or表源 和 实际行中的内容 注:这
【深度学习】最强算法之:残差网络(ResNet)
一篇掌握深度学习算法之:残差网络
7,reduce 端的 join 算法,map 的 join 算法
一 ,reduce 的 join 算法 1 ,订单表 : t_order: oid date pid amount 1001 20150710 P0001 2 1002 20150710 P0001 3 1003 20150710 P0002 3 2 ,商品表 : t_product pid pname category_id price P0001 ...
华为的C语言编程规范.pdf
华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。
android 蓝牙通讯demo
android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。
map-side-join /Reduce-side-join
一、Mapreduce-join概念 Mapreduce-join分为两种:实例:祖孙三代的关系连接 (1)、map-side-join 即在map端进行join,会在map端读取所有数据并 进行join过滤。 【Map-side-join】 Map-side-join思想:分布式缓存文件,读到内存中. Map-side-join实用场景:在那些需要处理的表中,存 在一个非常大的表
SAP B1中文培訓教材_SDK
公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说
Hive中map-join 和 reduce-join
配置 hive.auto.convert.join 0.11版本之后默认是true。 hive.mapjoin.smalltable.filesize/hive.smalltable.filesize map join通常用于一个很小的表和一个大表进行join的场景,具体小表有多小,由参数 hive.mapjoin.smalltable.filesize来决定,该参数表示小表的总大小,默认值为2...
VC中sqlite的使用
在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示
Reduce连接(reduce-side joins)
2019独角兽企业重金招聘Python工程师标准>>> ...
Apache Spark探秘:实现Map-side Join和Reduce-side Join
在大数据处理场景中,多表Join是非常常见的一类运算。为了便于求解,通常会将多表join问题转为多个两表连接问题。两表Join的实现算法非常多,一般我们会根据两表的数据特点选取不同的join算法,其中,最常用的两个算法是map-side join和reduce-side join。本文将介绍如何在apache spark中实现这两种算法。 (1)Map-side Join
reduce端join与map端join算法实现
本篇博客小菌为大家带来的是MapReduce中reduce端join与map端join算法的实现。 reduce端join算法实现 先让我们来看下需求,有下面两种表格: 订单数据表 t_order...
Reduce Side Join实现
Reduce Side Join Example User and comment join In thisexample, we’ll be using theusers and comments tables from the StackOverflow dataset. Storing data in this matter makessense, as storingrepetitiv
Hadoop的Map-side join和Reduce-side join
Hadoop中连接(join)操作很常见,Hadoop“连接”的概念本身,和SQL的“连接”是一致的。SQL的连接,在维基百科中已经说得非常清楚。比如dataset A是关于用户个人信息的,key是用户id,value是用户姓名等等个人信息;dataset B是关于用户交易记录的,key是用户id,value是用户的交易历史等信息。我们当然可以对这两者以共同键用户id为基准来连接两边的数据。 首先,
mapreduce value 排序_MapReduce 之 Reduce Join 0317
1.1 reduce join在map阶段, 把关键字作为key输出,并在value中标记出数据是来自data1还是data2。因为在shuffle阶段已经自然按key分组,reduce阶段,判断每一个value是来自data1还是data2,在内部分成2组,做集合的乘积。这种方法有2个问题:1, map阶段没有对数据瘦身,shuffle的网络传输和排序性能很低。2, reduce端对2个集合做乘...
Hadoop :Join 操作
Hadoop :Join 操作 一、 实验目的 基于 MapReduce 思想,编写两文件 Join 操作的程序。 二、 实验要求 2. 能够理解 MapReduce 编程思想,然后会编写 MapReduce 版本 Join 程序,并能执 行该程序和分析执行过程。 三、 实验背景 3. 概述 对于 RDBMS 中的 Join 操作大伙一定非常熟悉,写 SQL 的时候要十分注意细节,稍 有差池就...
7768



被折叠的 条评论
为什么被折叠?



