Mapreduce Piglatin查找一列是否包含另一列的内容
我有一个看起来很简单的问题,但我就是想不出来 我有如下数据:Mapreduce Piglatin查找一列是否包含另一列的内容,mapreduce,apache-pig,Mapreduce,Apache Pig,我有一个看起来很简单的问题,但我就是想不出来 我有如下数据: A (B, C, A) B (X, Y, Z) C (F, C, D) 我使用Pig拉丁语检查第一列中的文本是否出现在第二列中 这是我目前的代码: Labels = LOAD 'example.txt' USING PigStorage('\t'); Projected = FOREACH Labels GENERATE $0 AS id, $1 AS group; X = FILTER Projected BY (group
A (B, C, A)
B (X, Y, Z)
C (F, C, D)
我使用Pig拉丁语检查第一列中的文本是否出现在第二列中
这是我目前的代码:
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,但没有效果
我已经被这件事困扰了很长一段时间,任何帮助都将不胜感激。谢谢 有两个问题,一个是因为变量组是保留字而无法命名,另一个是匹配字符串“(chararray)id”,而不是id 此外,我认为永远不要按索引分配变量,只要在load语句中定义变量,就可以删除投影别名
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(',');
经过测试,它成功了。非常感谢!这很有帮助。:)记住,CONCAT可以接受2个以上的参数。