MapReduce 初级案例——多表关联
作者:虾皮
多表关联和单表关联类似,它也是通过对原始数据进行一定的处理,从其中挖掘出关心的信息,下面进入一个实例。
1 实例描述
输入是两个文件,一个代表工厂表,包含工厂名列和地址编号列;另一个代表地址表,含ctoryname addressed的信息。
包含地址名列和地址编号列。要求从输入数据中找出工厂名和地址名的对应关系,输出“ 工厂名——地址名”表。样例输入如下所示。
样例输出如下所示。
2 设计思路
多表关联和单表关联相似,都类似于数据库中的自然连接。相比单表关联,多表关联的左右表和连接列更加清楚。所以可以采用和单表关联的相同的处理方式,map识别出输入的行属于哪个表之后,对其进行分割,将连接的列值保存在key中,另一列和左右表标识保存在value中,然后输出。reduce拿到连接结果之后,解析value内容,根据标志将左右表内容分开存放,然后求笛卡尔积,最后直接输出。这个实例的具体分析参考单表关联实例。下面给出代码。
3 程序代码
程序代码如下所示:
4 代码结果
1)准备测试数据
通过 Eclipse 下面的 “ DFS Locations”在“ /user/hadoop”目录下创建输入文件“ MTjoin_in”文件夹( 备注:“ MTjoin_out”不需要创建。)如图 5.4-1 所示,已经成功创建。
然后在本地建立两个 txt 文件,通过 Eclipse 上传到“ /user/hadoop/MTjoin_in”文件夹中,两个 txt 文件的内容如“实例描述”那两个文件一样。如图 5.4-2 所示,成功上传之后。从 SecureCRT 远处查看“ Master.Hadoop”的也能证实我们上传的两个文件。
2)查看运行结果
这时我们右击 Eclipse 的“ DFS Locations”中“ /user/hadoop”文件夹进行刷新,这时会发现多出一个“ MTjoin_out”文件夹,且里面有 3 个文件,然后打开双其“ part-r-00000”文件,会在 Eclipse 中间把内容显示出来。如图 5.4-4 所示。
End.