2013-02-16 48 views
2

我有以下簡單的豬的腳本,簡單的豬加入和處理兩袋

AA = LOAD 'A' USING PigStorage(',') as (f1,f2,f3); 
BB = LOAD 'B' AS (f1); 
C = foreach AA generate f1; 
C = JOIN AA BY f1 LEFT OUTER, BB BY f1 using 'replicated'; 
D = FOREACH C GENERATE FLATTEN((IsEmpty(AA) ? null : AA)); 
store D into 'd'; 

但是當我運行,它給了我這個錯誤:

無效標投影:AA:A柱的需求從一個關係中投影出來用作標量

請問您能幫忙嗎?

最佳, 薩拉

回答

2

按照IsEmpty文檔:

,,Checks if a bag or map is empty"

在你的情況下,它不會因爲Ç工作是包含一個元組/線只用一個外袋AA and BB

C: {AA::f1: int,AA::f2: chararray,AA::f3: chararray,BB::f1: int} 

您可以應用Bincond操作上的每個字段從AA而不是檢查和更換值,例如:

D = foreach C generate (AA::f1 is null ? '-1' : AA::id) ... ; 

但如果你堅持的IsEmpty,那麼下面將做的工作:

D = foreach C { 
bg = TOBAG(TOTUPLE(AA::f1,AA::f2,AA::f3)); 
generate IsEmpty(bg) ...; 
} 

注意:
我認爲在IsEmpty部分Pig文檔中可能存在拼寫錯誤。 Earlier在示例中cogroup用於連接兩個關係,這兩個關係創建了一個IsEmpty可以在其上操作的內袋。 Later這被替換爲左連接,導致你描述的相同問題。