0

我有一个关系 J2,它看起来像 (Popp,{(100)}) (Urman,{(100)}) (Sciarra,{(100)}) (Chen,{(100)}) (Faviet,{( 100)}) (Gietz,{()}) (Higgins,{()}) (LAST_NAME,{()}) (Grant,{()})....我必须测试袋子是空的还是不是,所以尝试了 :S = FILTER J2 BY IsEmpty($1);.. 它正在成功执行,但输出为空。任何人都可以请指导我。使用 IsEmpty() 是否有任何先决条件?

注意:DESCRIBE J2 给出“{AA::LAST_NAME: chararray,{(int)}}”

4

1 回答 1

0

解释如下:您的包中包含元组,因此在以下情况下:Gietz,{()} 包本身不是空的,其中包含一个空元组。因此,让我们测试以下输入:

Urman,{(100)}
Gietz,{()}
LAST_NAME,{} 

如果您预测袋子的尺寸,您将得到以下结果:

(Urman,1)
(Gietz,1)
(LAST_NAME,0)

Gietz 的包大小也是 1,因为它包含一个元组,并且元组本身是否为空并不重要。

怎么做:(这是一种可行的解决方案)

data = LOAD 'SO/name.txt' USING PigStorage(',') AS (name:chararray,b:bag{(val:int)});
DESCRIBE data;
a = FOREACH data GENERATE name AS name, b AS b, FLATTEN($1) AS x;
b = FILTER a BY x IS NULL;
DUMP a;

它转储:

(Gietz,{()},)
(Higgins,{()},)
(LAST_NAME,{()},)
(Grant,{()},)

输入:

Popp,{(100)} 
Urman,{(100)}
Sciarra,{(100)} 
Chen,{(100)}
Faviet,{(100)} 
Gietz,{()}
Higgins,{()}
LAST_NAME,{()} 
Grant,{()}
于 2015-12-17T01:54:17.577 回答