过滤猪

时间:2012-04-25 11:00:02

标签: hadoop filtering apache-pig

我正在尝试对pig中的关系进行过滤,我需要在第一个字段字符串中出现第三个字段的所有记录。

我尝试过: (假设我的源关系是SRC)

Filtered= FILTER SRC BY $0 matches 'CONCAT(".*",$2,".")';
DUMP Filtered;

没有语法错误,但我没有获得Filtered的任何输出。

4 个答案:

答案 0 :(得分:4)

Pig的CONCAT只有两个参数。请参阅http://pig.apache.org/docs/r0.10.0/func.html#concat

上的文档

我不确定为什么它不会在运行时抱怨,但你想要将两个CONCAT语句串起来,比如

CONCAT(".*", CONCAT($2, "."))

获取你想要的字符串。

答案 1 :(得分:2)

我不认为CONCAT正在解决你期望的问题,更多的是匹配可能试图匹配整个未经评估的字符串CONCAT(".*",$2,"."),这就是为什么你没有得到任何结果

你可以把它分成两个语句,第一个是你创建一个包含CONCAT评估内容的字段,第二个是执行匹配操作:

TMP = FOREACH SRC GENERATE $0, CONCAT(".*",$2,".");
Filtered = FILTER TMP BY $0 matches $1;
DUMP Filtered;

或类似的东西(完全未经测试)

答案 2 :(得分:1)

我认为你只是有一些语法错误

  • 如A. Leistra所述,CONCAT只提出两个论点。
  • ""最后应该是"。*"如果你想要双面通配符
  • FILTER语句更喜欢参数
  • 周围的括号
  • Pig有很多涉及双引号的奇怪边缘情况,所以只要你能
  • 就可以使用单一

Filtered= FILTER SRC BY ($0 matches CONCAT('.*', CONCAT($2, '.*')));

答案 3 :(得分:0)

试试这个,

Filtered= FILTER SRC BY $0 matches '(.*)$2(.*)';

DUMP Filtered;

如果第三个字段包含第一个字段,那么将过滤该结果。 这是通过使用Regex完成的。