2013-04-21 62 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

相关问题