2013-04-21 66 views
0

我有一個看似非常簡單的問題,但我似乎無法弄清楚。Piglatin找到一列是否包含另一列的內容

我有一個看起來像這樣的數據:

A (B, C, A) 
B (X, Y, Z) 
C (F, C, D) 

我使用的Pig Latin檢查,如果在第一列中的文字出現在第二列。

這是我的代碼現在:

Labels = LOAD 'example.txt' USING PigStorage('\t'); 

Projected = FOREACH Labels GENERATE $0 AS id, $1 AS group; 

X = FILTER Projected BY (group matches '.*(chararray)id.*'); 

STORE X INTO '/test' USING PigStorage(','); 

我期待的輸出爲:「*」

A (B, C, A) 
C (F, C, D) 

我也試過串接的ID,但它是無濟於事。

我一直堅持與此相當一段時間,任何幫助將不勝感激。謝謝!

回答

0

有兩個問題,一個是你不能命名你的變量組,因爲這是一個保留字,兩個匹配字符串「(chararray)id」,而不是id。

另外IMO我認爲它更清潔永遠不要通過索引分配變量,只是在你的load語句中定義它們,如果你這樣做,你可以刪除Projected別名。

Labels = LOAD 'example.txt' USING PigStorage('\t') AS 
    (id:chararray, stringvalue:chararray); 
X = FILTER Labels BY (stringvalue matches CONCAT(CONCAT('.*',id),'.*')); 
STORE X INTO '/test' USING PigStorage(','); 

經過測試,它工作。

+0

非常感謝!這有幫助。 :) – Karen 2013-04-22 07:53:36

相關問題