2013-11-04 167 views
1

我正在与Apache猪和Mahout工作。现在我正在研究apache mahout的频繁模式增长。我在下面的格式有数据如何从组转换成阿帕奇猪集

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

--load数据

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)} 

这是我的问题,我如何改变t他包创建为分组到以下格式的结果

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

回答

0

您可以通过使用袋投影只获得你所感兴趣的领域:

proj = FOREACH grpdata GENERATE group, data.item; 

这会给你

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

不幸的是,没有内置的功能来摆脱包被串行化成字符串的方式。你需要编写一个UDF来为你做这件事。

+0

感谢。这对我帮助很大。 – user2950865

0

为了获得:

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

你可以这样做:

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