我有具有不同数量的零件文件的递归目录结构。我想在这些文件上应用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解决方案,欢迎您,我也会尝试:)
使用Cascading CoGroup API怎么可能?
请帮助我解决此问题,我正在尝试从最近两周开始解决此问题。
提前致谢!
最佳答案
在这里,我们可以使用级联中提供的简单混合联接来解决这个问题
http://docs.cascading.org/cascading/2.5/javadoc/cascading/pipe/joiner/MixedJoin.html
首先将每个输入路径连接到每个管道,然后合并与目录相关的管道。
让合并输出Pipes得到dir1,dir2,dir3,它将有文件
字段1字段2字段3字段4字段5
并创建这些管道的数组作为dir []
为我们要连接的每个管道创建连接字段数组,即
字段1字段3字段4字段5
保留inoder以保留输出中所需的字段