假设我在file.txt中有一组值
a、 b、c级
a、 b、d
k、 我,m
k、 左,右
k、 我,o
我的代码是:
file=使用pigstorage(',')加载'file.txt';
events=foreach文件生成session\u id、user\u id、code、type;
gr=事件分组依据(会话id、用户id);
我有一套价值观:
((a,b),{(a,b,c),(a,b,d)})
((k,l),{(k,l,m),(k,l,n),(k,l,o)})
我想要:(a,b,(c,d))
(k,l,(m,n,o))
你知道怎么做吗?
向帕维尔问好
1条答案
按热度按时间8aqjt8rx1#
注意:你的问题前后矛盾。你说呢
session_id, user_id, code, type
在FOREACH
行,但您有一个不提供值的pig存储。还有,那FOREACH
有4个值,而示例数据只有3个值。我假设type
不是为了回答你的问题。在你的
gr
关系时,您将保留group by key(在本例中(session_id, user_id)
)在一个自动生成的元组中group
.所以,第一步:
gr2 = FOREACH gr GENERATE FLATTEN(group);
这会给你元组(a,b)
以及(k,l)
. 你需要使用FLATTEN
因为group
是一个元组session_id
以及user_id
是单独的列。FLATTEN
这是为你做的。现在修改
gr2
线条也可以使用投影来梳理出第三个值:(a, b, {c, d})
(k, l, {m, n, o})