【问题标题】:How to use CoGroup of Cascading如何使用级联的 CoGroup
【发布时间】:2014-03-18 06:49:11
【问题描述】:

我的递归目录结构具有不同数量的部分文件。我想在这些文件上应用 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 将如何实现? 请帮我解决这个问题,我正在尝试从过去两周开始解决这个问题。

提前致谢!

【问题讨论】:

    标签: hadoop mapreduce cascading


    【解决方案1】:

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

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

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

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

    字段1 字段2 字段3 字段4 字段5

    并将这些管道的数组创建为 dir[]

    创建我们要连接的每个管道的连接字段数组,该数组用于每个管道 字段1 字段3 字段4 字段5

    字段 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 = JoinPipe = new CoGroup(dir[],JoinFields[],new MixedJoin(outputFields,i);

    需要管道 = new Retain("field1","field2_dir1_files","field2_dir2_files","field2_dir3_files","field3","field4","field5");

    retain inode 保留输出中需要的字段

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-04
      • 2017-10-09
      相关资源
      最近更新 更多