猪中的组 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 等效项?的主要内容,如果未能解决你的问题,请参考以下文章

Django 中的 GROUP_CONCAT 等效项

CONCAT_WS 的 BigQuery 等效项

Bigquery Standard Sql 等效于 Legacy Sql 中的 GROUP_CONCAT_UNQUOTED

使用时刻 js 将 mysql 日期中的组 concat 更改为印度尼西亚日期格式

SQL 中的 STUFF 等效函数(MySQL 中的 GROUP_CONCAT / Oracle 中的 LISTAGG)

Postgresql GROUP_CONCAT 等效?