2015-10-19 91 views
0

这里删除的元组是我的代码,为我的问题:猪拉丁语中的数据包

a = LOAD 'tellers' using TextLoader() AS line; 
# convert a to charrarry 
b = foreach a generate (chararray)line; 
# run through my UDF to create tuples 
c = foreach b generate myudfs.TellerParser5(line); # ({(20),(5),(5),(10)(1),(1),(1),(1),(1),(5),(10),(10),(10)}).... 
d = foreach c generate flatten(number); 
e = group d by number; #{group: chararray,d: {(number: chararray)}} 
f = foreach e generate group, COUNT(d); # f: {group: chararray,long} 

在databag女,我有一个空的元组(1)我想过滤/删除。

dump f; 
(,1) 
(1,97) 
(5,49) 
(10,87) 
(20,24) 

describe f; 
f: {group: chararray,long} 

我已经试过这没有成功(不作任何改变):

remove_tuple = filter f BY group is not null; 

回答

0

集团是猪keyword。希望这适用于元组名称使用其他单词时。

+0

如何更改元组名称?为什么它是“组”是我创建数据包“e”的方式。所以上面为我编辑的代码。 – jKraut

+0

在第一个脚本本身中更改“e”并尝试..... U不应该在任何地方使用关键字作为元组名称.... – madhu

0

NULL可以通过使用!='null'作为条件进行过滤。我已将以下作为输入。

(,1) 
(1,97) 
(5,49) 
(10,87) 
(20,24) 

以下是我们如何过滤NULL的方法。

A = LOAD 'file' using PigStorage(',') AS (a:chararray,b:long); 
B = FILTER A BY a!='null'; 
DUMP B; 

因此,对于你的脚本行会像

remove_tuple = filter f BY group!='null'; 

输出:

(1,97) 
(5,49) 
(10,87) 
(20,24) 
+0

当我使用此命令然后“转储”时,我没有得到任何结果。 – jKraut

+0

对不起,我错过了报价,你现在可以尝试。更新了答案。 –

+0

嗯,只是试过,并没有影响结果 – jKraut

0

我通过增加一个步骤,并且铸造为int解决。以下是步骤:

e = foreach d generate (int)$0; # this is the key added step 

f = group e by number; #{group: chararray,d: {(number: chararray)}} 
g = foreach f generate group, COUNT(e); # f: {group: chararray,long} 
h = foreach f generate group, SUM(e); 
i = filter g by $0 is not null; 
dump i; 
(1,97) 
(5,49) 
(10,87) 
(20,24)