Hadoop 猪过滤器

Posted

技术标签:

【中文标题】Hadoop 猪过滤器【英文标题】:Hadoop Pig Filter 【发布时间】:2013-08-07 23:05:26 【问题描述】:

我有一个这样的输入文件:

481295b2-30c7-4191-8c14-4e513c7e7577,1362974399,56973118825,56950298471,true
67912962-dd84-46fa-84ef-a2fba12c2423,1362974399,56950556676,56982431507,false
cc68e779-4798-405b-8596-c34dfb9b66da,1362974399,56999223677,56998032823,true
37a1cc9b-8846-4cba-91dd-19e85edbab00,1362974399,56954667454,56981867544,false
4116c384-3693-4909-a8cc-19090d418aa5,1362974399,56986027804,56978169216,true

我只需要最后提交为“true”的行。所以我使用下面的 Pig Latin:

records = LOAD 'test/test.csv' USING PigStorage(',');
A = FILTER records BY $4 'true';
DUMP A;

问题是第二个命令,我总是得到错误:

2013-08-07 16:48:11,505 [main] ERROR org.apache.pig.tools.grunt.Grunt - ERROR 1200: <line 2, column 25>  mismatched input ''true'' expecting SEMI_COLON

为什么?我也尝试了 "$4 == 'true'" 但仍然不起作用。谁能告诉我怎么做这个简单的事情?

【问题讨论】:

【参考方案1】:

怎么样:

A = FILTER records BY $4 == 'true' ;

此外,如果您事先知道数据将包含多少个字段,您应该给它一个架构。比如:

records = LOAD 'test/test.csv' USING PigStorage(',') 
          AS (val1: chararray, val2: int, val3: int, val4: int, bool: chararray);

或任何适合您需要的名称/类型。

【讨论】:

以上是关于Hadoop 猪过滤器的主要内容,如果未能解决你的问题,请参考以下文章

猪过滤掉不匹配

猪优化器是不是在加入前过滤空值?

如何从复杂的猪数据类型中提取简单的猪数据类型

如何检查猪 UDF 中的数据类型

过滤器上的猪 udf

大数据笔记(十四)——HBase的过滤器与Mapreduce