如何在apache中从group转换为set

ztyzrc3y  于 2021-06-03  发布在  Hadoop
关注(0)|答案(2)|浏览(257)

我和ApachePig和马霍特一起工作。现在我正在研究apachemahout的频繁模式增长。我有以下格式的数据

user items
    1     i1
    1     i2
    1     i3
    2     i2
    2     i5
    2     i6
    3     i1
    3     i4

--加载数据

data = LOAD '$input' AS (user,item);

然后我按用户对数据进行分组

grpdata = GROUP data BY user;

我得到了

1 {(1,i1),(1,i2),(1,i3)}
2 {(2,i2),(2,i5),(2,i6)}
3 {(3,i1),(3,i4)}

我的问题是,如何将分组后创建的包更改为以下格式

1 i1,i2,i3
2 i2,i5,i6
3 i1,i4
a8jjtwal

a8jjtwal1#

您可以使用包投影获得感兴趣的字段:

proj = FOREACH grpdata GENERATE group, data.item;

这会给你

1 {(i1),(i2),(i3)}
2 {(i2),(i5),(i6)}
3 {(i1),(i4)}

不幸的是,没有内置的功能来摆弄将包序列化为字符串的方式。你将需要写一个自定义项,为你做这一块。

s4chpxco

s4chpxco2#

为了获得:

(i1,i2,i3)
(i2,i5,i6)
(i1,i4)

您可以这样做:

res = foreach grpdata generate FLATTEN(BagToTuple($1.item));

相关问题