Piglatin用于查找列是否包含另一列的内容

时间:2013-04-21 01:34:29

标签: mapreduce apache-pig

我有一个看似非常简单的问题,但我似乎无法弄明白。

我的数据如下:

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但是没有用。

我已经坚持了很长一段时间,任何帮助都会非常感激。谢谢!

1 个答案:

答案 0 :(得分: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(',');

经过测试,它有效。