• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
导航菜单
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • windows
  • 服务器硬件
  • 服务器运维
  • 云计算
  • 虚拟化
  • IIS教程
  • Linux
  • Apache
  • Ftp
  • DNS
  • Nginx
您的位置:首页 > 服务器 >云计算 > MapReduce处理表的自连接,mapreduce处理表

MapReduce处理表的自连接,mapreduce处理表

作者:网友 字体:[增加 减小] 来源:互联网

本文主要包含mapreduce是什么,node mapreduce,mapreduce,mapreduce原理,mapreduce编程实例等服务器相关知识,网友希望可以进行参考

MapReduce处理表的自连接,mapreduce处理表


原始数据

/*
 * 原始数据
 * 子    父
 * Tom Lucy
 Tom Jack
 Jone Locy
 Jone Jack
 Lucy Mary
 Lucy Ben
 Jack Alice
 Jack Jesse
 TerryAlice
 TerryJesse
 PhilipAlma
 Mark Terry
 Mark Alma
 */

要求通过子父关系找出子-祖母关系

/*
 * 设计方法:连接的左表的parent列(key),右表的child列(key),且左右表属于同一张表
 * 所以在map阶段将读入数据分割成child,parent后,会将parent设置成key,child设置成value输出,并作为左表
 * 再将同一对child和parent中的child作为key,parent作为value进行输出,作为右表
 * 为了区分输出中的左右表,需要在输出的value中再加上左右表的信息,比如在value的string最开始出加上字符1表示左表,加上2表示右表。
 * 然后在shuffle过程中完成连接,reduce接收到连接的结果,其中每个key的value-list就包含了“grandchild-grandparent”关系。
 * 取出每个key的value-list进行解析,将左表中的child放入一个数组(就一个key),右表中的grandparent放入一个数组,然后对两个数组求笛卡儿积就ko了
 *
 */

1.Map类

package test.mr.selfrelated;

import java.io.IOException;

import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;

/*
 * 表的自连结(grandchild-grandparend表)
 */
/*
 * 原始数据
 * 子    父
 * Tom	Lucy
 Tom	Jack
 Jone	Locy
 Jone	Jack
 Lucy	Mary
 Lucy	Ben
 Jack	Alice
 Jack	Jesse
 TerryAlice
 TerryJesse
 PhilipAlma
 Mark	Terry
 Mark	Alma
 */
/*
 * 设计方法:连接的左表的parent列(key),右表的child列(key),且左右表属于同一张表
 * 所以在map阶段将读入数据分割成child,parent后,会将parent设置成key,child设置成value输出,并作为左表
 * 再将同一对child和parent中的child作为key,parent作为value进行输出,作为右表
 * 为了区分输出中的左右表,需要在输出的value中再加上左右表的信息,比如在value的string最开始出加上字符1表示左表,加上2表示右表。
 * 然后在shuffle过程中完成连接,reduce接收到连接的结果,其中每个key的value-list就包含了“grandchild-grandparent”关系。
 * 取出每个key的value-list进行解析,将左表中的child放入一个数组(就一个key),右表中的grandparent放入一个数组,然后对两个数组求笛卡儿积就ko了
 * 
 */
public class selfRelatedMap extends Mapper<LongWritable, Text, Text, Text> {
	@Override
	protected void map(LongWritable key, Text value,
			Mapper<LongWritable, Text, Text, Text>.Context context)
			throws IOException, InterruptedException {
		String line = value.toString();
		if (line.trim().length() > 0) {
			String str[] = line.split("\t");
			if (str.length == 2) {
				context.write(new Text(str[1]), new Text("1_" + str[0])); // 左表
				context.write(new Text(str[0]), new Text("2_" + str[1])); // 右表
			}
		}

	}
}


 

2.Reduce类

package test.mr.selfrelated;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;

public class selfRelatedRedu extends Reducer<Text, Text, Text, Text> {
	@Override
	protected void reduce(Text key, Iterable<Text> values,
			Reducer<Text, Text, Text, Text>.Context context)
			throws IOException, InterruptedException {
		List<String> grandsons = new ArrayList<String>();
		List<String> grandparents = new ArrayList<String>();
		for (Text t : values) {
			// 进行value字符串切分
			String str[] = t.toString().split("_");
			if ("1".equals(str[0])) {
				// 左表 //作为孙
				grandsons.add(str[1]);
			} else if ("2".equals(str[0])) {
				// 右表 //作为祖母辈
				grandparents.add(str[1]);
			}
		}
		// 做笛卡尔积
		for (String gc : grandsons) {
			for (String gp : grandparents) {
				context.write(new Text(gc), new Text(gp));
			}
		}
	}
}


 

3.job类

package test.mr.selfrelated;

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.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;

public class selfRelatedMain {
	public static void main(String[] args) throws Exception {
		Configuration conf = new Configuration();
		Job job = new Job(conf);
		job.setJarByClass(selfRelatedMain.class);

		job.setMapperClass(selfRelatedMap.class);
		job.setMapOutputKeyClass(Text.class);
		job.setMapOutputValueClass(Text.class);

		job.setReducerClass(selfRelatedRedu.class);
		job.setOutputKeyClass(Text.class);
		job.setOutputValueClass(Text.class);

		FileInputFormat.addInputPath(job, new Path(args[0]));
		FileOutputFormat.setOutputPath(job, new Path(args[1]));
		job.waitForCompletion(true);
	}
}


 

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 高阶MapReduce_3_reducer侧联结原理,mapreduce原理
  • MapReduce 按照Value值进行排序输出,mapreducevalue
  • 分析MapReduce与Storm的异同,mapreducestorm
  • MapReduce之RecordReader组件源码解析及实例,mapreduce实例
  • MapReduce编程之WordCount,mapreducewordcount
  • MapReduce对输入多文件的处理,mapreduce输入处理
  • MapReduce实现倒排索引,mapreduce实现索引
  • MapReduce处理表的自连接,mapreduce处理表
  • MapReduce的两表join操作优化,mapreduce表join

相关文章

  • Spark Streaming和Flume集成指南V1.4.1,flumev1.4.1
  • Greenplum数据库升级实务(上),greenplum实务
  • Docker在Ubuntu的部署实践,dockerubuntu部署
  • 吐槽Oozie: 挖好坑,等你跳!,oozie
  • 在Windows上使用Eclipse配置Hadoop MapReduce开发环境,hadoopmapreduce
  • Error: Failed to launch instance &quot;win7&quot;: Please try again later [Error: No valid host was found. ].,win7valid
  • CRM市场及Zoho模式,CRM市场Zoho模式
  • Hadoop 1.x的Shuffle源码分析之2,hadoopshuffle
  • What&#39;s Wrong With Hue Oozie Editor?,hueoozie
  • hadoop2.6.0伪分布式安装,hadoop2.6.0伪

文章分类

  • windows
  • 服务器硬件
  • 服务器运维
  • 云计算
  • 虚拟化
  • IIS教程
  • Linux
  • Apache
  • Ftp
  • DNS
  • Nginx

最近更新的内容

    • Linux下libsvm的安装及简单练习,linuxlibsvm练习
    • Hive学习笔记(二),hive学习笔记
    • 常见类型网站的SEO应该怎么操作?类型不同,操作自然不同,因为分门别类嘛,seo分门别类
    • python模块,python
    • hadoop权威指南(第四版)要点翻译(1)——Foreword and Preface,hadoopforeword
    • 《4》CentOS7.0+OpenStack+kvm云平台部署—配置Nova,《4》kvm
    • HDFS读文件解析,
    • NUTCH2.3 hadoop2.7.1 hbase1.0.1.1 solr5.2.1部署(一),hadoop2.7安装
    • hadoop集群只有一个datanode启动问题,hadoop集群datanode
    • Zookeeper实践之:通过Zookeeper实现一个消费者进程分配程序,zookeeper消费者

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有