假设我有一个pig表,有3列,a,b,c。现在假设我想按b==4过滤表,然后按a分组。我相信会像这样。
t1 = my_table; -- the table contains three columns a, b, c
t1_filtered = FILTER t1_filtered by (
b == 4
);
t1_grouped = GROUP t1_filtered by my_table.a;
我的问题是为什么不能这样:
t1 = my_table; -- the table contains three columns a, b, c
t1_filtered = FILTER t1_filtered by (
b == 4
);
t1_grouped = GROUP t1_filtered by t1_filtered.a;
为什么必须在筛选之前引用表?我在学Pig,我发现自己经常犯这个错误。在我看来,t1\u filtered应该等于一个表,它只是t1的过滤版本。因此,一个简单的组应该是有意义的,但是我被告知您需要引用以前的表。有人知道幕后发生了什么吗?为什么这么做有意义?另外,帮助命名这个问题也很感激。
1条答案
按热度按时间9q78igpj1#
取消引用(.)的方式也不正确。应该是这样的。
但在某些情况下,你取消引用的方法也会起作用。在引用复杂数据类型(如map、tuple或bag)时,只能使用点(.)。如果我们使用点运算符来访问正规字段,它将期望一个标量输出。如果它有多个输出,那么您将得到类似这样的错误。
使用点运算符的方法只有在
group by
只有一个输出,如果没有,则会导致此错误。关系b不是一个复杂的数据类型,这就是为什么我们在group by
条款。希望这能回答你的问题。