Hadoop HelloWorld Examples – 单表连接

宜家博客
宜家博客
宜家博客
39155
文章
0
评论
2019年8月4日07:45:16 评论 169 1584字阅读5分16秒

应该是那本"Hadoop 实战"的第4个demo了,单表连接。给出一对对的children和parents的名字,然后输出所有的grandchildren和grandparents对。

相关阅读:

《Hadoop实战》中文版+英文文字版+源码【PDF】 http://www.linuxidc.com/Linux/2012-10/71901.htm

Hadoop: The Definitive Guide【PDF版】 http://www.linuxidc.com/Linux/2012-01/51182.htm

输入数据(第一列child,第二列 parent)

Tom Lucy
Tom Jack
Jone Lucy
Jone Jack
Lucy Mary
Lucy Ben
Jack Alice
Jack Jesse
Terry Alice
Terry Jesse
Philip Terry
Philip Alma
Mark Terry
Mark Alma

输出数据(第一列grandchild,第二列grandparents)

Tom    Jesse
Tom    Alice
Jone    Jesse
Jone    Alice
Jone    Ben
Jone    Mary
Tom    Ben
Tom    Mary
Philip    Alice
Philip    Jesse
Mark    Alice
Mark    Jesse

  不知到是"Hadoop 实战" 还是那个虾皮工作室写的解法,把这个问题说成是单表联接。个人觉得其实没有这么深奥,说白了非常的简单,map输入:如上所说,key是child's name, value是parent's name; map的输出:key是名字,value是“标识+名字”,其中标识'0'后面接他的child's name,'1'接他的parent's name。比如第一个记录Tom Lucy,那么key是"Tom", value是"1Lucy",还有key是lucy,value是"0Tom" 。 reducer的输入:对于每一个人名(key),它的一系列values是他的children或者parents name(通过标识来识别是children还是parents),这样子得到key的children集合和parents集合(说白了就是知道了key的所有children和parents的名字)。然后求这两个集合的乘积(或者称为笛卡尔积)即可。。

具体代码如下:

import java.util.*;
import java.io.*;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapred.TextInputFormat;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat;
import org.apache.hadoop.mapreduce.lib.input.KeyValueTextInputFormat;

继续阅读
weinxin
欢迎加入中国站长博客之家
本站的所有资源都会上传分享到博客之家,希望大家互相学习交流进步。
宜家博客
Java数据结构-线性表之静态链表 Linux编程

Java数据结构-线性表之静态链表

静态链表的定义: 节点由一个一维数组和一个指针域组成,数组用来存放数据元素,而指针域里面的指针(又称游标)用来指向下一个节点的数组下标。这样的链表称之为静态链表。 链表中的数组第一个和最后一个位置需要...
进程控制块的task_struct结构 Linux编程

进程控制块的task_struct结构

》进程控制块       在linux中进程信息存放在叫做进程控制块的数据结构中,每个进程在内核中都有⼀个进程控制块(PCB)来维护进程相关的信息,Linux内核的 进程...
C語言 rand函数 进阶探讨与实现 Linux编程

C語言 rand函数 进阶探讨与实现

C语言中随机函数应用 可能大家都知道C语言中的随机函数random,可是random函数并不是ANSI C标准,所以说,random函数不能在gcc,vc等编译器下编译通过。那么怎么实现C语言中的随机...
Python多进程中使用pool Linux编程

Python多进程中使用pool

Python 多进程中使用pool,pool中指定每次运行几个进程,当其中一个进程结束完毕后,会加入新的进程 #!/usr/bin/env python#coding: utf-8import mul...
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: