2015-10-19 90 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)