gpt4 book ai didi

hadoop - 如何在 Pig (Hadoop) 中的组函数之后创建一组值

转载 作者:可可西里 更新时间:2023-11-01 14:31:50 25 4
gpt4 key购买 nike

假设我在 file.txt 中有一组值
一、二、三
一、二、二
k,l,m
k,l,n
k,l,o

我的代码是:
file = LOAD 'file.txt' 使用 PigStorage(',');
events = foreach file generate session_id, user_id, code, type;
gr = 按 (session_id, user_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))

你知道怎么做吗?

问候帕维尔

最佳答案

注意:你的问题不一致。您在 FOREACH 行中说 session_id, user_id, code, type,但是您的 PigStorage 不提供值。此外,FOREACH 有 4 个值,而您的示例数据只有 3 个。我假设 type 不存在以回答您的问题。


在你的 gr 关系之后,你将在一个名为 group 的自动生成的元组中留下按键组(在本例中为 (session_id, user_id))

所以,第一步:gr2 = FOREACH gr GENERATE FLATTEN(group);这将为您提供元组 (a,b)(k,l)。您需要使用 FLATTEN 因为 group 是一个元组并且您要求 session_iduser_id 是单独的列. FLATTEN 为您完成。

好的,现在修改 gr2 行,也使用投影来梳理第三个值:

gr2 = FOREACH gr GENERATE FLATTEN(group), events.code;

events.code 从所有 code 值中创建一个 bagevents 是分组元组包的名称(它以原始关系命名)。

这应该给你:

 (a, b, {c, d})
(k, l, {m, n, o})

请务必注意,列表中的值是在包中而不是元组中,就像您要求的那样。将它放在包中是正确的想法,因为包是一个变量列表,而元组不是。


其他建议:了解 GROUP BY 输出数据的方式是我看到很多人在第一次使用 Pig 时遇到的困难。如果您认为我的回答没有多大意义,我建议您花一些时间真正了解 GROUP BY。从长远来看,理解与认为它是神奇的会有所返回。

关于hadoop - 如何在 Pig (Hadoop) 中的组函数之后创建一组值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19452594/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com