如何使用CoGroup of Cascading

时间:2014-03-18 06:49:12

标签: hadoop mapreduce cascading

我正在使用具有不同数量的部分文件的递归目录结构。我想在这些文件上应用CoGroup。

假设,我的目录结构如下:

directory1/dir1/part-0000
               /part-0001
               /part-0002
           dir2/part-0000
               /part-0001
               /part-0002
           dir3/part-0000
               /part-0001
               /part-0002
           dir4/part-0000
               /part-0001
               /part-0002

这些零件文件包含制表符分隔数据,如:
field1 field2 field3 field4 field5

我想将所有部分文件合并为公共值field1field3field4field5。也就是说,最终输出文件将包含如下数据:

field1 field2_dir1_files field2_dir2_files field2_dir3_files field2_dir4_files field3 field4 field5

如果有任何MapReduce解决方案,欢迎您,我也会尝试使用:) 如何使用Cascading CoGroup API? 请帮我解决这个问题,我试着在过去两周内解决这个问题。

提前致谢!

1 个答案:

答案 0 :(得分:1)

在这里,我们可以通过使用级联中提供的简单混合连接来解决这个问题

http://docs.cascading.org/cascading/2.5/javadoc/cascading/pipe/joiner/MixedJoin.html

首先将每个输入路径连接到每个管道,合并管道与目录相关。

让合并输出管道我们得到dir1,dir2,dir3这将有文件

field1 field2 field3 field4 field5

并以dir []

创建这些管道的数组

为每个管道创建每个管道的连接字段数组,用于每个管道 field1 field3 field4 field5

  

字段outputFields = new Fields(“field1”,“field2_dir1_files”,“field3”,“field4”,“field5”,“2field1”,“2field2_dir2_files”,“2field3”,“2field4”,“2field5”,“ 3field1" , “field2_dir3_files”, “3field3”, “3field4”, “3field5”);

     

boolean [] i = {false,false,false}

     

Pipe LastJoin = joinedPipe = new CoGroup(dir [],JoinFields [],new MixedJoin(outputFields,i);

     

需要管道=新保留(“field1”,“field2_dir1_files”,“field2_dir2_files”,“field2_dir3_files”,“field3”,“field4”,“field5”);

保留inoder以保留输出中所需的字段