如何使用级联的cogroup

hof1towb  于 2021-06-04  发布在  Hadoop
关注(0)|答案(1)|浏览(393)

我有递归目录结构有不同数量的部分文件。我想在这些文件上应用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 我要合并所有具有公共值的零件文件 field1 , field3 , field4 以及 field5 . 也就是说,最终输出文件将包含如下数据:

field1 field2_dir1_files field2_dir2_files field2_dir3_files field2_dir4_files field3 field4 field5

如果有任何mapreduce解决方案,我也会尝试:)
如何使用级联cogroupapi??请帮助我解决这个问题,我正在努力解决这个问题从过去两个星期。
提前谢谢!

zbwhf8kr

zbwhf8kr1#

在这里,我们可以通过使用级联中提供的简单混合联接来解决这个问题
http://docs.cascading.org/cascading/2.5/javadoc/cascading/pipe/joiner/mixedjoin.html
首先将每个输入路径连接到每个管道,然后合并与目录相关的管道。
让合并输出管道得到dir1,dir2,dir3,其中包含文件
字段1字段2字段3字段4字段5
并将这些管道的数组创建为dir[]
创建要连接的每个管道的连接字段数组,即每个管道的连接字段为field1 field3 field4 field5
fields outputfields=新字段(“field1”,“field2\u dir1\u files”,“field3”,“field4”,“field5”,“2field1”,“2field2\u dir2\u files”,“2field3”,“2field4”,“2field5”,“3field1”,“field2\u dir3\u files”,“3field3”,“3field4”,“3field5”);
布尔值[]i={false,false,false}
pipe lastjoin=joiningpipe=new cogroup(dir[],joinfields[],new mixedjoin(outputfields,i));
需要管道=新保留(“field1”,“field2\u dir1\u files”,“field2\u dir2\u files”,“field2\u dir3\u files”,“field3”,“field4”,“field5”);
retain inoder保留输出中所需的字段

相关问题