“ 单表关联”这个实例要求从给出的数据中寻找所关心的数据,它是对原始数据所包含信息的挖掘。

MapReduce初级事例——单表相关(mapreduce简单例子)  单表关联 数据 信息 第1张

“ 单表相关”这个实例要求从给出的数据中寻觅所关怀的数据,它是对原始数据所包括信息的发掘。下面进入这个实例。

1 .实例描绘

实例中给出 child-parent(孩子——爸爸妈妈)表,要求输出 grandchild-grandparent(孙子——爷奶)表。

样例输入如下所示。

file:

MapReduce初级事例——单表相关(mapreduce简单例子)  单表关联 数据 信息 第2张

宗族树状联系谱:

MapReduce初级事例——单表相关(mapreduce简单例子)  单表关联 数据 信息 第3张

样例输出如下所示。

file:

MapReduce初级事例——单表相关(mapreduce简单例子)  单表关联 数据 信息 第4张

2 .规划思路

剖析这个实例,明显需求进行单表衔接,衔接的是左表的 parent 列和右表的 child 列,且左表和右表是同一个表。

衔接成果中除掉衔接的两列便是所需求的成果——“ grandchild–grandparent”表。要用MapReduce 处理这个实例, 首要应该考虑怎么完结表的自衔接; 其次便是衔接列的设置;最终是成果的收拾。

考虑到 MapReduce 的 shuffle 进程会将相同的 key 会衔接在一起,所以能够将 map 成果的 key 设置成待衔接的列,然后列中相同的值就自然会衔接在一起了。再与最开端的剖析联系起来:

要衔接的是左表的 parent 列和右表的 child 列,且左表和右表是同一个表,所以在 map阶段将读入数据分割成 child 和 parent 之后,会将 parent 设置成 key, child 设置成 value进行输出,并作为左表;再将同一对 child 和 parent 中的 child 设置成 key, parent 设置成value 进行输出,作为右表。

为了区别输出中的左右表,需求在输出的 value 中再加上左右表的信息,比如在 value 的 String 最开端处加上字符 1 表明左表,加上字符 2 表明右表。

这样在 map 的成果中就形成了左表和右表,然后在 shuffle 进程中完结衔接。 reduce 接收到衔接的成果,其间每个 key 的 value-list 就包括了“ grandchild–grandparent”联系。

取出每个key 的 value-list 进行解析,将左表中的 child 放入一个数组, 右表中的 parent 放入一个数组,然后对两个数组求笛卡尔积便是最终的成果了。

3 .程序代码

程序代码如下所示。

MapReduce初级事例——单表相关(mapreduce简单例子)  单表关联 数据 信息 第5张

MapReduce初级事例——单表相关(mapreduce简单例子)  单表关联 数据 信息 第6张

MapReduce初级事例——单表相关(mapreduce简单例子)  单表关联 数据 信息 第7张

MapReduce初级事例——单表相关(mapreduce简单例子)  单表关联 数据 信息 第8张

MapReduce初级事例——单表相关(mapreduce简单例子)  单表关联 数据 信息 第9张

MapReduce初级事例——单表相关(mapreduce简单例子)  单表关联 数据 信息 第10张

MapReduce初级事例——单表相关(mapreduce简单例子)  单表关联 数据 信息 第11张

4 .代码成果

预备测试数据

经过 Eclipse 下面的“ DFS Locations”在“ /user/hadoop”目录下创立输入文件“ STjoin_in”文件夹( 补白:“ STjoin_out”不需求创立。)如图 4.4-1 所示,现已成功创立。

MapReduce初级事例——单表相关(mapreduce简单例子)  单表关联 数据 信息 第12张

然后在本地树立一个 txt 文件,经过 Eclipse 上传到“ /user/hadoop/STjoin_in”文件夹中,一个 txt 文件的内容如“实例描绘”那个文件相同。如图 4.4-2 所示,成功上传之后。

从 SecureCRT 远处检查“ Master.Hadoop”的也能证明咱们上传的文件,显现其内容如图 4.4-3 所示:

MapReduce初级事例——单表相关(mapreduce简单例子)  单表关联 数据 信息 第13张

运转详解

( 1) Map 处理:

map 函数输出成果如下所示。

MapReduce初级事例——单表相关(mapreduce简单例子)  单表关联 数据 信息 第14张

( 2) Shuffle 处理

在 shuffle 进程中完结衔接。

MapReduce初级事例——单表相关(mapreduce简单例子)  单表关联 数据 信息 第15张

MapReduce初级事例——单表相关(mapreduce简单例子)  单表关联 数据 信息 第16张

首要由句子“ 0 != grandchildnum && 0 != grandparentnum”得知,只要在“ value-list”中没有左表或许右表,则不会做处理,能够依据这条规矩去除无效的 shuffle 衔接。

MapReduce初级事例——单表相关(mapreduce简单例子)  单表关联 数据 信息 第17张

然后依据下面句子进一步对有用的 shuffle 衔接做处理。

MapReduce初级事例——单表相关(mapreduce简单例子)  单表关联 数据 信息 第18张

针对一条数据进行剖析:

MapReduce初级事例——单表相关(mapreduce简单例子)  单表关联 数据 信息 第19张

剖析成果: 左表用“ 字符 1”表明, 右表用“ 字符 2”表明,上面的

中的“ key”表明左表与右表的衔接键。而“ value-list”表明以“ key”衔接的左表与右表的

相关数据。

依据上面针对左表与右表不同的处理规矩,获得两个数组的数据如下所示:

MapReduce初级事例——单表相关(mapreduce简单例子)  单表关联 数据 信息 第20张

然后依据下面句子进行处理。

MapReduce初级事例——单表相关(mapreduce简单例子)  单表关联 数据 信息 第21张

处理成果如下面所示:

MapReduce初级事例——单表相关(mapreduce简单例子)  单表关联 数据 信息 第22张

其他的有用 shuffle 衔接处理都是如此。

(3)检查运转成果

这时咱们右击 Eclipse 的“ DFS Locations”中“ /user/hadoop”文件夹进行改写,这时会发现多出一个“ STjoin_out”文件夹,且里边有 3 个文件,然后翻开双其“ part-r-00000”文件,会在 Eclipse 中心把内容显现出来。如图 4.4-4 所示。

MapReduce初级事例——单表相关(mapreduce简单例子)  单表关联 数据 信息 第23张

转载请说明出处
知优网 » MapReduce初级事例——单表相关(mapreduce简单例子)

发表评论

您需要后才能发表评论