isempty未按预期在pig中工作

qcbq4gxm  于 2021-06-24  发布在  Pig
关注(0)|答案(1)|浏览(371)

我有一个关系j2,看起来像(popp,{(100)})(urman,{(100)})(sciarra,{(100)})(chen,{(100)})(faviet,{(100)})(gietz,{()})(higgins,{()})(last\u name,{()})(grant,{()})。。。。我必须测试包是否是空的,所以尝试了:s=filter j2 by isempty($1);。。它正在成功执行,但输出为空。谁能给我指点一下吗。使用isempty()有任何先决条件吗?
note:describe j2 给出“{aa::last\u name:chararray,{(int)}”

1mrurvl1

1mrurvl11#

这里的解释是:您的包包含元组,所以在下面的例子中: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,{()}

相关问题