猪中的组 concat 等效项?

Posted

技术标签:

【中文标题】猪中的组 concat 等效项?【英文标题】:group concat equivalent in pig? 【发布时间】:2013-09-13 07:02:18 【问题描述】:

试图在 Pig 上完成这项工作。 (寻找 mysql 的 group_concat() 等效项)

例如,在我的表格中,我有:(3fields-userid, clickcount,pagenumber)

155 | 2 | 12
155 | 3 | 133
155 | 1 | 144
156 | 6 | 1
156 | 7 | 5

想要的输出是:

155| 2,3,1 | 12,133,144

156| 6,7 | 1,5

如何在 PIG 上实现这一点?

【问题讨论】:

【参考方案1】:
grouped = GROUP table BY userid;
   X = FOREACH grouped GENERATE group as userid, 
                                table.clickcount as clicksbag, 
                                table.pagenumber as pagenumberbag;

现在X 将是:

(155,(2),(3),(1),(12),(133),(144),
 (156,(6),(7),(1),(5)

现在你需要使用builtin UDF BagToTuple:

output = FOREACH X GENERATE userid, 
                            BagToTuple(clickbag) as clickcounts, 
                            BagToTuple(pagenumberbag) as pagenumbers;

output 现在应该包含您想要的内容。您也可以将输出步骤合并到合并步骤中:

    output = FOREACH grouped GENERATE group as userid, 
                     BagToTuple(table.clickcount) as clickcounts, 
                     BagToTuple(table.pagenumber) as pagenumbers;

【讨论】:

我使用的是 .10 版本。我相信 BagToTuple 可以从 .11 版本开始使用。谢谢 Raze2dust。 那么您自己升级或实施了 BagToTuple 吗?

以上是关于猪中的组 concat 等效项?的主要内容,如果未能解决你的问题,请参考以下文章