猪中的组 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 等效项?的主要内容,如果未能解决你的问题,请参考以下文章
Bigquery Standard Sql 等效于 Legacy Sql 中的 GROUP_CONCAT_UNQUOTED
使用时刻 js 将 mysql 日期中的组 concat 更改为印度尼西亚日期格式
SQL 中的 STUFF 等效函数(MySQL 中的 GROUP_CONCAT / Oracle 中的 LISTAGG)